Explorer
/proc/2012/task/2113/root/tmp/aa050_release.py
← Zurück ↓ Download
import sqlite3,json,datetime,subprocess
ids=[20,56,57,76,85,132]; DB='/opt/struktur/youtube-research/knowledge.db'; R='/opt/struktur/graphiti/request-data/requests.db'
q=sqlite3.connect(DB); q.row_factory=sqlite3.Row; rows=[dict(x) for x in q.execute('select * from graphiti_import_queue where id in (%s) order by id'%(','.join(map(str,ids))))]
r=sqlite3.connect('file:'+R+'?mode=ro',uri=True); r.row_factory=sqlite3.Row
active=[dict(x) for x in r.execute("select request_id,queue_id,status,http_status,episode_uuid from graphiti_requests where queue_id in (%s) and status in ('started','processing')"%(','.join(map(str,ids))))]
neo=[]
for x in rows:
 name='aa043_'+str(x.get('import_identity') or '')
 cy="MATCH (n:Episodic) WHERE n.name='"+name+"' RETURN n.uuid AS uuid,n.name AS name LIMIT 2"
 p=subprocess.run(['docker','exec','graphiti-neo4j','cypher-shell','-u','neo4j','-p','graphiti2026','--format','plain',cy],capture_output=True,text=True)
 neo.append({'id':x['id'],'expected_name':name,'query_rc':p.returncode,'result':p.stdout.strip()[:500],'stderr':p.stderr.strip()[:300]})
print('BEFORE',json.dumps({'ids':ids,'row_count':len(rows),'active_requests':active,'neo4j_exact_name_checks':neo},indent=2,default=str))
if len(rows)!=len(ids) or active or any(x['query_rc']!=0 or len(x['result'].splitlines())>1 for x in neo): raise SystemExit('ABORT_PRECONDITION')
now=datetime.datetime.now(datetime.timezone.utc).isoformat()
q.execute('BEGIN IMMEDIATE')
for i in ids:
 q.execute("update graphiti_import_queue set graphiti_status='retry_wait', next_attempt_at=?, locked_at=NULL, lock_owner=NULL, lock_token=NULL, lease_expires_at=NULL, heartbeat_at=NULL, remote_outcome='REQUEUED_AA050', updated_at=? where id=? and graphiti_status='processing' and graphiti_episode_id is null",(now,now,i))
 if q.total_changes<1: raise SystemExit('ABORT_UPDATE_'+str(i))
q.commit(); q.close(); r.close(); print('UPDATED',now,ids)