Files
openclaw/skills/paradiz/scripts/maintain_sync_sqlite.py
2026-02-21 20:55:28 +00:00

57 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import json
import sqlite3
from pathlib import Path
DB_PATH = Path('/home/openclaw/.openclaw/workspace/skills/paradiz/data/db/sync.sqlite')
def main():
p = argparse.ArgumentParser(description='Cleanup and health-check for sync.sqlite')
p.add_argument('--days', type=int, default=90, help='Keep logs for last N days')
p.add_argument('--warn-mb', type=float, default=50.0, help='Warn if DB exceeds this size in MB')
args = p.parse_args()
if not DB_PATH.exists():
print(json.dumps({'ok': False, 'error': 'sync.sqlite not found', 'path': str(DB_PATH)}, ensure_ascii=False))
return
conn = sqlite3.connect(str(DB_PATH))
cur = conn.cursor()
before_rows = cur.execute('SELECT COUNT(*) FROM log').fetchone()[0]
cutoff = cur.execute("SELECT julianday('now', ?)", (f'-{args.days} days',)).fetchone()[0]
cur.execute('DELETE FROM log WHERE creation < ?', (cutoff,))
deleted = cur.rowcount if cur.rowcount is not None else 0
conn.commit()
cur.execute('VACUUM')
conn.close()
size_mb = DB_PATH.stat().st_size / (1024 * 1024)
warn = size_mb > args.warn_mb
# reopen only to read count after vacuum
conn = sqlite3.connect(str(DB_PATH))
cur = conn.cursor()
after_rows = cur.execute('SELECT COUNT(*) FROM log').fetchone()[0]
conn.close()
print(json.dumps({
'ok': True,
'db': str(DB_PATH),
'kept_days': args.days,
'rows_before': before_rows,
'rows_deleted': deleted,
'rows_after': after_rows,
'size_mb': round(size_mb, 3),
'warn_threshold_mb': args.warn_mb,
'size_warn': warn
}, ensure_ascii=False))
if __name__ == '__main__':
main()