Explorer
/proc/thread-self/root/tmp/aa053_backup.py
← Zurück ↓ Download
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))