import hashlib
import json
import os
import sqlite3
OUTDIR = "/root/backups-h012/AA-053/20260829T110406Z"
SOURCES = [
"/var/lib/sma-data/signals.db",
"/opt/struktur/social-media-agent/cases.db",
"/opt/struktur/social-media-agent/db/posts.db",
"/var/lib/sma-core/runtime.db",
"/var/lib/sma-core/provider-settings.db",
]
results = []
for source in SOURCES:
name = source.strip("/").replace("/", "__") + ".sqlite"
destination = os.path.join(OUTDIR, name)
source_db = sqlite3.connect(f"file:{source}?mode=ro", uri=True)
source_integrity = source_db.execute("PRAGMA integrity_check").fetchone()[0]
backup_db = sqlite3.connect(destination)
source_db.backup(backup_db)
backup_db.close()
source_db.close()
os.chmod(destination, 0o600)
verify_db = sqlite3.connect(f"file:{destination}?mode=ro", uri=True)
backup_integrity = verify_db.execute("PRAGMA integrity_check").fetchone()[0]
object_count = verify_db.execute(
"SELECT count(*) FROM sqlite_master WHERE name NOT LIKE ?",
("sqlite_%",),
).fetchone()[0]
verify_db.close()
with open(destination, "rb") as handle:
digest = hashlib.sha256(handle.read()).hexdigest()
results.append(
{
"source": source,
"backup": destination,
"bytes": os.path.getsize(destination),
"source_integrity": source_integrity,
"backup_integrity": backup_integrity,
"objects": object_count,
"sha256": digest,
}
)
print(json.dumps(results, ensure_ascii=False, indent=2))