fstests: add fio perf results support
[xfstests-dev.git] / src / perf / generate-schema.py
1 import json
2 import argparse
3 import FioResultDecoder
4 from dateutil.parser import parse
5
6 def is_date(string):
7     try:
8         parse(string)
9         return True
10     except ValueError:
11         return False
12
13 def print_schema_def(key, value, required):
14     typestr = value.__class__.__name__
15     if typestr == 'str' or typestr == 'unicode':
16         if (is_date(value)):
17             typestr = "datetime"
18         else:
19             typestr = "varchar(256)"
20     requiredstr = ""
21     if required:
22         requiredstr = " NOT NULL"
23     return ",\n  `{}` {}{}".format(key, typestr, requiredstr)
24
25 parser = argparse.ArgumentParser()
26 parser.add_argument('infile', help="The json file to strip")
27 args = parser.parse_args()
28
29 json_data = open(args.infile)
30 data = json.load(json_data, cls=FioResultDecoder.FioResultDecoder)
31
32 # These get populated by the test runner, not fio, so add them so their
33 # definitions get populated in the schema properly
34 data['global']['config'] = 'default'
35 data['global']['kernel'] = '4.14'
36 data['global']['name'] = 'alrightalrightalright'
37
38 print("CREATE TABLE IF NOT EXISTS `fio_runs` (")
39 outstr = "  `id` INTEGER PRIMARY KEY AUTOINCREMENT"
40 for key,value in data['global'].iteritems():
41     outstr += print_schema_def(key, value, True)
42 print(outstr)
43 print(");")
44
45 required_fields = ['run_id']
46
47 job = data['jobs'][0]
48 job['run_id'] = 0
49
50 print("CREATE TABLE IF NOT EXISTS `fio_jobs` (")
51 outstr = "  `id` INTEGER PRIMARY KEY AUTOINCREMENT"
52 for key,value in job.iteritems():
53     outstr += print_schema_def(key, value, key in required_fields)
54 print(outstr)
55 print(");")