import sqlite3,json,subprocess,re,os
DB='/opt/struktur/youtube-research/knowledge.db'; c=sqlite3.connect('file:'+DB+'?mode=ro',uri=True); c.row_factory=sqlite3.Row
print('TRIGGERS',json.dumps([dict(r) for r in c.execute("select name,sql from sqlite_master where type='trigger'")],ensure_ascii=False))
for q in ["select job_id,video_id,youtube_id,status,step,attempts,lease_until from e2e_jobs where job_id in (274,275)","select status,count(*) n from e2e_jobs group by status","select transcript_status,count(*) n from videos group by transcript_status","select count(*) n from transcript_segments where video_id=1246"]:
print('Q',q,json.dumps([dict(r) for r in c.execute(q)],ensure_ascii=False))
for p in ['db.py','app.py','e2e_worker.py']:
path='/opt/struktur/youtube-research/'+p; print('FILE',path)
lines=open(path,errors='ignore').read().splitlines()
for i,l in enumerate(lines,1):
if p=='db.py' and 130<=i<=190: print(f'{i}:{l}')
if p=='app.py' and any(x in l for x in ['e2e_jobs','INSERT OR IGNORE INTO videos','add_video','save_video']): print(f'{i}:{l}')
if p=='e2e_worker.py' and (55<=i<=90 or 95<=i<=115): print(f'{i}:{l}')
print('UNIT',subprocess.run(['systemctl','cat','youtube-research-e2e-worker.service'],capture_output=True,text=True).stdout)
print('STATUS',subprocess.run(['systemctl','show','youtube-research-e2e-worker.service','-p','ActiveState','-p','SubState','-p','MainPID','-p','NRestarts','-p','ExecMainStatus'],capture_output=True,text=True).stdout)