-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathlog.py
More file actions
58 lines (45 loc) · 1.46 KB
/
log.py
File metadata and controls
58 lines (45 loc) · 1.46 KB
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
import json
import numpy as np
def extract_meter_values(meters):
ret = { }
for split in meters.keys():
ret[split] = { }
for field,meter in meters[split].items():
ret[split][field] = meter.value()[0]
return ret
def render_meter_values(meter_values):
field_info = []
for split in meter_values.keys():
for field,val in meter_values[split].items():
field_info.append("{:s} {:s} = {:0.6f}".format(split, field, val))
return ', '.join(field_info)
def convert_array(d):
ret = { }
for k,v in d.items():
if isinstance(v, dict):
ret[k] = { }
for kk,vv in v.items():
ret[k][kk] = np.array(vv)
else:
ret[k] = np.array(v)
return ret
def load_trace(trace_file):
ret = { }
with open(trace_file, 'r') as f:
for i,line in enumerate(f):
vals = json.loads(line.rstrip('\n'))
if i == 0:
for k,v in vals.items():
if isinstance(v, dict):
ret[k] = { }
for kk in v.keys():
ret[k][kk] = []
else:
ret[k] = []
for k,v in vals.items():
if isinstance(v, dict):
for kk,vv in v.items():
ret[k][kk].append(vv)
else:
ret[k].append(v)
return convert_array(ret)