1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
import sys
import json
from dbaccess import execQuery, database
from misc import (
idToText, textToId, metricIdToLowerIsBetter, benchmarkToComponents,
getSnapshots, getTimeSeries, getChanges, getTimeSeriesMiscStats,
printJSONHeader)
class GetTimeSeriesDetails:
def __init__(
self, host, platform, branch, sha11, sha12, difftol, durtolmin,
durtolmax, benchmark, metric):
self.host = host
self.platform = platform
self.branch = branch
self.sha11 = sha11
self.sha12 = sha12
self.difftol = difftol
self.durtolmin = durtolmin
self.durtolmax = durtolmax
self.benchmark = benchmark
self.metric = metric
self.host_id = textToId("host", host)
self.platform_id = textToId("platform", platform)
self.branch_id = textToId("branch", branch)
self.sha11_id = textToId("sha1", sha11)
self.sha12_id = textToId("sha1", sha12)
self.benchmark_id = textToId("benchmark", benchmark)
self.metric_id = textToId("metric", metric)
def execute(self):
snapshots = getSnapshots(
self.host_id, self.platform_id, self.branch_id, self.sha11_id,
self.sha12_id)
# Get the content and some basic stats of the time series:
(self.time_series, self.tot_ninvalid, self.tot_nzeros,
self.median_of_rses, self.rse_of_medians, self.ms,
self.lsd) = getTimeSeries(
self.host_id, self.platform_id, self.branch_id, snapshots,
self.benchmark_id, self.metric_id)
# Extract the significant changes:
changes_all = getChanges(
self.time_series, metricIdToLowerIsBetter(self.metric_id),
self.difftol, self.durtolmin, self.durtolmax)
self.changes = tuple([item[1:3] for item in changes_all])
self.lib = "1" if metricIdToLowerIsBetter(self.metric_id) else "0"
# Get misc. statistics:q
self.stats = {}
getTimeSeriesMiscStats(
self.time_series, changes_all, snapshots, self.stats)
self.writeOutput()
def writeOutputAsJSON(self):
printJSONHeader()
json.dump({
'time_series': self.time_series,
'changes': self.changes,
'lib': self.lib,
'ms': self.ms,
'lsd': self.lsd,
'ni': self.tot_ninvalid,
'nz': self.tot_nzeros,
'nc': len(self.changes),
'med_of_rses': self.median_of_rses,
'rse_of_meds': self.rse_of_medians,
'lc': self.stats["lc"],
'lc_timestamp': self.stats["lc_timestamp"],
'lc_distance': self.stats["lc_distance"],
'lc_gsep_score': self.stats["lc_gsep_score"],
'lc_lsep_score': self.stats["lc_lsep_score"],
'lc_dur1_score': self.stats["lc_dur1_score"],
'lc_dur2_score': self.stats["lc_dur2_score"]
}, sys.stdout)
class GetTimeSeriesDetailsAsJSON(GetTimeSeriesDetails):
def writeOutput(self):
self.writeOutputAsJSON()
|