57 lines
1.7 KiB
Python
Executable File
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()
|