| # SPDX-License-Identifier: GPL-2.0 |
| |
| import json |
| import argparse |
| import FioResultDecoder |
| from dateutil.parser import parse |
| |
| def is_date(string): |
| try: |
| parse(string) |
| return True |
| except ValueError: |
| return False |
| |
| def print_schema_def(key, value, required): |
| typestr = value.__class__.__name__ |
| if typestr == 'str' or typestr == 'unicode': |
| if (is_date(value)): |
| typestr = "datetime" |
| else: |
| typestr = "varchar(256)" |
| requiredstr = "" |
| if required: |
| requiredstr = " NOT NULL" |
| return ",\n `{}` {}{}".format(key, typestr, requiredstr) |
| |
| parser = argparse.ArgumentParser() |
| parser.add_argument('infile', help="The json file to strip") |
| args = parser.parse_args() |
| |
| json_data = open(args.infile) |
| data = json.load(json_data, cls=FioResultDecoder.FioResultDecoder) |
| |
| # These get populated by the test runner, not fio, so add them so their |
| # definitions get populated in the schema properly |
| data['global']['config'] = 'default' |
| data['global']['kernel'] = '4.14' |
| data['global']['name'] = 'alrightalrightalright' |
| |
| print("CREATE TABLE IF NOT EXISTS `fio_runs` (") |
| outstr = " `id` INTEGER PRIMARY KEY AUTOINCREMENT" |
| for key,value in data['global'].iteritems(): |
| outstr += print_schema_def(key, value, True) |
| print(outstr) |
| print(");") |
| |
| required_fields = ['run_id'] |
| |
| job = data['jobs'][0] |
| job['run_id'] = 0 |
| |
| print("CREATE TABLE IF NOT EXISTS `fio_jobs` (") |
| outstr = " `id` INTEGER PRIMARY KEY AUTOINCREMENT" |
| for key,value in job.iteritems(): |
| outstr += print_schema_def(key, value, key in required_fields) |
| print(outstr) |
| print(");") |