Spaces:
Paused
Paused
| """ | |
| Metrics Cleanup Script | |
| Deletes PerformanceMetric records older than 30 days to manage database size. | |
| Intended to be run as a cron job or scheduled task. | |
| """ | |
| import os | |
| import sys | |
| from datetime import datetime, timedelta | |
| # Add backend to path for imports | |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) | |
| from core.database import SessionLocal | |
| from core.logging import logger | |
| from core.models.performance import PerformanceMetric | |
| def cleanup_metrics(retention_days: int = 30): | |
| """Delete metrics older than retention period""" | |
| cutoff_date = datetime.utcnow() - timedelta(days=retention_days) | |
| logger.info(f"Starting metrics cleanup. Deleting records older than {cutoff_date.isoformat()}") | |
| db = SessionLocal() | |
| try: | |
| deleted_count = db.query(PerformanceMetric).filter( | |
| PerformanceMetric.timestamp < cutoff_date | |
| ).delete(synchronize_session=False) | |
| db.commit() | |
| logger.info(f"✅ Cleanup complete: Deleted {deleted_count} stale metric records.") | |
| except Exception as e: | |
| db.rollback() | |
| logger.error(f"❌ Cleanup failed: {e}") | |
| finally: | |
| db.close() | |
| if __name__ == "__main__": | |
| retention = int(os.getenv("METRICS_RETENTION_DAYS", 30)) | |
| cleanup_metrics(retention) | |