Explorer
/proc/109/root/tmp/test_recovery.py
← Zurück ↓ Download
import sqlite3, datetime, subprocess, json, time

# Connect to databases
k = sqlite3.connect('/opt/struktur/youtube-research/knowledge.db')
s = sqlite3.connect('/opt/struktur/obsidian-graphiti-import/obsidian_graphiti_import.db')

# Get current state before
done_before = k.execute(
    "select count(*) from graphiti_import_queue "
    "where reconciliation_record_id like 'aa043:%' and graphiti_status='done'"
).fetchone()[0]

print(f"=== AA-043-P2Z-F START ===")
print(f"Time: {datetime.datetime.now(datetime.timezone.utc).strftime('%H:%M UTC')}")
print(f"Done before: {done_before}")

# Find eligible queue item (lease_expired with no episode)
eligible = k.execute("""select id, obsidian_path, source_version_id 
from graphiti_import_queue 
where reconciliation_record_id like 'aa043:%' 
and graphiti_status='lease_expired'
order by id limit 1""").fetchone()

if not eligible:
    print("No lease_expired items found")
    raise SystemExit(1)

qid, path, version_id = eligible
print(f"\nSelected Queue ID {qid} for recovery test:")
print(f"  Path: {path}")

# Try the writer
start_time = time.time()
result = subprocess.run(
    ['bash', '-c', f'dev/null /opt/struktur/obsidian-graphiti-import/aa043-writer-batch.sh --queue-id={qid}'],
    capture_output=True, text=True, timeout=600, cwd='/opt/obsidian-vault'
)

end_time = time.time()
duration = end_time - start_time

print(f"\nWriter result:")
print(f"  Duration: {duration:.1f}s")
print(f"  Return code: {result.returncode}")

if result.stdout.strip():
    print(f"  Output: {result.stdout[:500]}")
if result.stderr.strip():
    print(f"  Errors: {result.stderr[:200]}")

# Check status after
done_after = k.execute(
    "select count(*) from graphiti_import_queue "
    "where reconciliation_record_id like 'aa043:%' and graphiti_status='done'"
).fetchone()[0]

print(f"\nDone after: {done_after} (+{done_after-done_before})")

# Show final distribution
print("\nQueue distribution:")
for st, c in k.execute(
    "select graphiti_status, count(*) from graphiti_import_queue "
    "where reconciliation_record_id like 'aa043:%' group by 1"
).fetchall():
    print(f"  {st}: {c}")