summaryrefslogtreecommitdiffstats
path: root/scripts/gettimeseriesstats.py
blob: 6b95080fdf416d848ba8fa5f9e36d283473c70ad (plain)
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
import sys
import json
from dbaccess import database
from misc import (
    idToText, textToId, metricIdToLowerIsBetter, benchmarkToComponents,
    getSnapshots, getBMTimeSeriesStatsList, printJSONHeader)

class GetTimeSeriesStats:

    def __init__(
        self, host, platform, branch, sha11, sha12, difftol, durtolmin,
        durtolmax, test_case_filter):
        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.test_case_filter = test_case_filter
        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)

    def execute(self):
        self.snapshots = getSnapshots(
            self.host_id, self.platform_id, self.branch_id, self.sha11_id,
            self.sha12_id)
        bmstats_list = getBMTimeSeriesStatsList(
            self.host_id, self.platform_id, self.branch_id, self.snapshots,
            self.test_case_filter, self.difftol, self.durtolmin, self.durtolmax)

        self.per_bm_stats = []
        for stats in bmstats_list:

            self.per_bm_stats.append({
                    'ms': stats['ms'],
                    'lsd': stats['lsd'],
                    'ni': stats['ni'],
                    'nz': stats['nz'],
                    'nc': stats['nc'],
                    'med_of_rses': stats['med_of_rses'],
                    'rse_of_meds': stats['rse_of_meds'],
                    'lc': stats['lc'],
                    'lc_timestamp': stats['lc_timestamp'],
                    'lc_distance': stats['lc_distance'],
                    'lc_gsep_score': stats['lc_gsep_score'],
                    'lc_lsep_score': stats['lc_lsep_score'],
                    'lc_dur1_score': stats['lc_dur1_score'],
                    'lc_dur2_score': stats['lc_dur2_score'],
                    'mt': stats['metric'],
                    'lib': "1" if stats['lib'] else "0",
                    'bm': stats['benchmark']
                    })

        self.writeOutput()


    def writeOutputAsJSON(self):
        printJSONHeader()
        json.dump({
                'database': database(),
                'host': self.host,
                'platform': self.platform,
                'branch': self.branch,
                'sha11': idToText("sha1", self.snapshots[0][0]),
                'sha12': idToText("sha1", self.snapshots[-1][0]),
                'difftol': self.difftol,
                'durtolmin': self.durtolmin,
                'durtolmax': self.durtolmax,
                'snapshots': map(
                    lambda s: (idToText("sha1", s[0]), s[1]), self.snapshots),
                'per_bm_stats': self.per_bm_stats
                }, sys.stdout)


class GetTimeSeriesStatsAsJSON(GetTimeSeriesStats):
    def writeOutput(self):
        self.writeOutputAsJSON()