"""radio/realtime 캐시 누적 정리 CLI — dry-run 우선, 삭제는 --apply. 핵심 로직은 services/radio_cache_prune.py 공용(일일 크론과 동일). 이 CLI는 수동 실행/검증용. ⚠️ 음성 자동삭제 사고 이력 준수 — 반드시 dry-run 확인 후 --apply. 실행(Oracle 컨테이너 내): python scripts/prune_radio_cache.py # dry-run(집계) python scripts/prune_radio_cache.py --apply # 실제 삭제 python scripts/prune_radio_cache.py --ments-days 14 --realtime-days 3 """ from __future__ import annotations import argparse import asyncio import sys sys.path.insert(0, "/app/backend") async def main(): ap = argparse.ArgumentParser() ap.add_argument("--ments-days", type=int, default=7) ap.add_argument("--realtime-days", type=int, default=2) ap.add_argument("--apply", action="store_true", help="실제 삭제(기본 dry-run)") args = ap.parse_args() from services import radio_cache_prune as rcp stats = await rcp.prune( ments_days=args.ments_days, realtime_days=args.realtime_days, apply=args.apply) mb = stats["bytes"] / 1024 / 1024 print(f"삭제 후보: {stats['candidates']}개 / {mb:.1f} MB " f"(radio/ments >{args.ments_days}일 + realtime >{args.realtime_days}일, studio 제외)") if args.apply: print(f"[apply] 삭제 {stats['deleted']} · 실패 {stats['failed']}") else: print("[dry-run] 삭제 안 함. 실제 삭제 = --apply") if __name__ == "__main__": asyncio.run(main())