Explorer
/opt/struktur/AA-043-P35-gate.py
← Zurück ↓ Download
import sqlite3,hashlib,json,sys,datetime
P=sys.argv[1]; B=sys.argv[2]
def co(p):
 c=sqlite3.connect('file:'+p+'?mode=ro&immutable=1',uri=True); c.row_factory=sqlite3.Row; return c
def fks(c): return {(x[0],x[1],x[2],x[3]) for x in c.execute('pragma foreign_key_check')}
def dist(c,q): return dict(c.execute(q).fetchall())
p=co(P); b=co(B); pf=fks(p); bf=fks(b); oldcols=['id','knowledge_unit_identity','statement','source_identity','source_version_id','content_version_hash','review_state','gold_state','legacy_placeholder']
def oldmap(c):
 cols={r[1] for r in c.execute('pragma table_info(knowledge_units)')}; use=[x for x in oldcols if x in cols]; return {r['id']:tuple(r[x] for x in use) for r in c.execute('select * from knowledge_units')},use
pm,pc=oldmap(p); bm,bc=oldmap(b); existing_same=all(pm.get(i)==v for i,v in bm.items())
out={'checked_at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'integrity':p.execute('pragma integrity_check').fetchone()[0],'fk_count':len(pf),'backup_fk_count':len(bf),'fk_fingerprint':hashlib.sha256(json.dumps(sorted(pf)).encode()).hexdigest(),'backup_fingerprint':hashlib.sha256(json.dumps(sorted(bf)).encode()).hexdigest(),'fk_set_equal':pf==bf,'new_fk_rows':sorted(pf-bf),'removed_fk_rows':sorted(bf-pf),'existing_ku_rows_unchanged':existing_same,'ku_total':p.execute('select count(*) from knowledge_units').fetchone()[0],'legacy':p.execute('select count(*) from knowledge_units where legacy_placeholder=1').fetchone()[0],'review':dict(p.execute('select review_state,count(*) from knowledge_units group by review_state').fetchall()),'evidence':dict(p.execute('select evidence_class,count(*) from knowledge_units group by evidence_class').fetchall()),'gold':dict(p.execute('select gold_state,count(*) from knowledge_units group by gold_state').fetchall()),'prov':p.execute('select count(*) from knowledge_unit_provenance').fetchone()[0],'review_audit':p.execute('select count(*) from knowledge_unit_review_audit').fetchone()[0],'new_table_fk':{t:len(p.execute('pragma foreign_key_check('+t+')').fetchall()) for t in ['knowledge_unit_provenance','knowledge_unit_review_audit']},'queue_status':dist(p,'select graphiti_status,count(*) from graphiti_import_queue group by graphiti_status'),'backup_queue_status':dist(b,'select graphiti_status,count(*) from graphiti_import_queue group by graphiti_status'),'release':dist(p,'select graphiti_release,count(*) from graphiti_import_queue group by graphiti_release'),'backup_release':dist(b,'select graphiti_release,count(*) from graphiti_import_queue group by graphiti_release')}
print(json.dumps(out,ensure_ascii=False)); p.close(); b.close()