Update readme
[tsan11-tsan11rec-docker.git] / scripts / calculator.py
1 #!/bin/python
2 import re
3 import statistics
4 import sys
5
6 def checkRace(content):
7     has_race = re.search(r'race', content)
8     if has_race:
9         print 'data race detected'
10     else:
11         print 'data race not detected'
12
13 def GdaxStatistics(filename):
14     gdax_data = []
15     with open(filename, 'r') as f:
16         content = f.read()
17         checkRace(content)
18
19         allruns = re.findall(r'(0-0\.49.*?19.99 s: \d+)', content, flags=re.DOTALL)
20         for run in allruns:
21             iterations = 0
22             for entry in run.split('\n'):
23                 if entry:
24                     (_, count) = entry.split(': ')
25                     iterations += int(count)
26
27             gdax_data.append(iterations)
28
29     return gdax_data
30
31 def SiloStatistics(filename):
32     data = []
33     with open(filename, 'r') as f:
34         content = f.read()
35         checkRace(content)
36         allruns = re.findall(r'agg_throughput: (\d+\.?\d*) ops', content)
37         data = [float(x) for x in allruns]
38
39     return data
40
41 def TimeStatistics(filename):
42     data = []
43     with open(filename, 'r') as f:
44         content = f.read()
45         checkRace(content)
46         allruns = re.findall(r'real.*?(\d+)m(\d+\.\d+)s', content)
47         for run in allruns:
48             (minute,second) = run
49             time = int(minute) * 60 + float(second)
50             data.append(time)
51
52     return data
53
54 def JsbenchStatistics(filename):
55      with open(filename, 'r') as f:
56         content = f.read()
57         checkRace(content)
58         result = re.search(r'(Final results.*?runs)', content, flags=re.DOTALL)
59         print(result.group(0))
60
61 def printData(data):
62     str_data = [str(x) for x in data]
63     print 'raw data:', ', '.join(str_data)
64     print 'mean:', statistics.mean(data)
65     print 'stddev:', statistics.stdev(data)
66     print ''
67
68 if __name__ == "__main__":
69     base = '.'
70     if len(sys.argv) == 2:
71         base = sys.argv[1]
72
73     print 'Silo measurement: agg_throughput, unit: ops/sec'
74     printData(SiloStatistics( base + '/silo.log'))
75
76     print 'Gdax measurement: number of iterations'
77     printData(GdaxStatistics( base + '/gdax.log'))
78
79     print 'Iris measurement: real time unit: seccond'
80     printData(TimeStatistics( base + '/iris.log'))
81
82     print 'Mabain measurement: real time, unit: second'
83     printData(TimeStatistics( base + '/mabain.log'))
84
85     print 'Jsbench results:'
86     JsbenchStatistics( base + '/jsbench.log');