"""Logging utility for tracking system events.""" from typing import Optional from datetime import datetime, timedelta from app.extensions import db from app.models.server_log import ServerLog def log_action(level: str, message: str) -> None: """Log an action to the database with specified level. Args: level: Log level (info, warning, error) message: Log message content """ try: new_log = ServerLog(level=level, message=message) db.session.add(new_log) db.session.commit() print(f"[{level.upper()}] {message}") except Exception as e: print(f"Error logging action: {e}") db.session.rollback() def get_recent_logs(limit: int = 20, level: Optional[str] = None) -> list: """Get the most recent log entries. Args: limit: Maximum number of logs to return level: Optional filter by log level Returns: List of ServerLog instances """ query = ServerLog.query if level: query = query.filter_by(level=level) return query.order_by(ServerLog.timestamp.desc()).limit(limit).all() def clear_old_logs(days: int = 30) -> int: """Delete logs older than specified days. Args: days: Number of days to keep Returns: Number of logs deleted """ try: cutoff_date = datetime.utcnow() - timedelta(days=days) deleted = ServerLog.query.filter(ServerLog.timestamp < cutoff_date).delete() db.session.commit() log_action('info', f'Deleted {deleted} old log entries (older than {days} days)') return deleted except Exception as e: db.session.rollback() print(f"Error clearing old logs: {e}") return 0 # Convenience functions for specific log levels def log_info(message: str) -> None: """Log an info level message.""" log_action('info', message) def log_warning(message: str) -> None: """Log a warning level message.""" log_action('warning', message) def log_error(message: str) -> None: """Log an error level message.""" log_action('error', message)