18 lines
1.3 KiB
Python
Executable File
18 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import argparse, datetime, json, pathlib, sqlite3
|
|
parser=argparse.ArgumentParser()
|
|
parser.add_argument('database', type=pathlib.Path)
|
|
parser.add_argument('report', type=pathlib.Path)
|
|
args=parser.parse_args()
|
|
report=json.loads(args.report.read_text(encoding='utf-8'))
|
|
asset=report['asset_id']
|
|
if not isinstance(asset,str) or not asset or len(asset)>64: raise ValueError('Invalid asset ID')
|
|
args.database.parent.mkdir(parents=True,exist_ok=True)
|
|
with sqlite3.connect(args.database,timeout=30) as db:
|
|
db.execute('PRAGMA journal_mode=DELETE')
|
|
db.execute('PRAGMA synchronous=FULL')
|
|
db.execute('CREATE TABLE IF NOT EXISTS scans (scan_id INTEGER PRIMARY KEY, asset_id TEXT NOT NULL, scanned_at_unix INTEGER, imported_at_utc TEXT NOT NULL, tool_version TEXT, model TEXT, cpu TEXT, health_gate TEXT, json TEXT NOT NULL)')
|
|
db.execute('CREATE INDEX IF NOT EXISTS scans_asset ON scans(asset_id,scan_id DESC)')
|
|
db.execute('INSERT INTO scans(asset_id,scanned_at_unix,imported_at_utc,tool_version,model,cpu,health_gate,json) VALUES(?,?,?,?,?,?,?,?)', (asset,report.get('timestamp_unix'),datetime.datetime.now(datetime.timezone.utc).isoformat(),report.get('tool_version'),report.get('model'),report.get('cpu'),report.get('health_gate'),json.dumps(report,separators=(',',':'))))
|
|
print('Recorded',asset,'in',args.database)
|