Add Deck dashboard with Athena telemetry history

This commit is contained in:
Mikei386
2026-09-29 22:31:03 +02:00
parent be40869712
commit aaf9f570e9
19 changed files with 1073 additions and 25 deletions
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env python3
"""Copy old Athena dashboard telemetry once, without reading chats or logs.
Run before the first Deck dashboard start. SQLite's backup API safely includes
the source WAL while the old dashboard is still collecting samples.
"""
import argparse
import os
import sqlite3
from pathlib import Path
REQUIRED = {'meta','samples_raw','samples_hourly','slot_samples_raw',
'slot_samples_hourly','token_totals','token_hourly','model_events'}
def import_history(source, target):
source=Path(source)
target=Path(target)
if not source.is_file() or target.exists():
raise ValueError('Quelldatenbank fehlt oder Deck-Ziel existiert bereits; nichts überschrieben.')
target.parent.mkdir(parents=True,exist_ok=True)
old=sqlite3.connect('file:'+str(source)+'?mode=ro',uri=True)
try:
tables={row[0] for row in old.execute("SELECT name FROM sqlite_master WHERE type='table'")}
if not REQUIRED<=tables:raise ValueError('Unbekanntes Dashboard-History-Schema.')
new=sqlite3.connect(target)
try:
old.backup(new)
if new.execute('PRAGMA integrity_check').fetchone()[0]!='ok':
raise ValueError('Kopierte Datenbank ist beschädigt.')
counts={table:new.execute('SELECT COUNT(*) FROM '+table).fetchone()[0]
for table in ('samples_raw','slot_samples_raw','token_hourly','model_events')}
except Exception:
new.close()
target.unlink(missing_ok=True)
raise
finally:
if new: new.close()
target.chmod(0o600)
if os.geteuid()==0:
owner=target.parent.stat()
os.chown(target,owner.st_uid,owner.st_gid)
return counts
finally:
old.close()
if __name__=='__main__':
parser=argparse.ArgumentParser(description=__doc__)
parser.add_argument('source',type=Path)
parser.add_argument('target',type=Path)
args=parser.parse_args()
print(import_history(args.source,args.target))