from core.dal.base_repository import BaseRepository class MetricsRepository(BaseRepository): def insert( self, server_id: int, cpu_percent: float, ram_mb: float = 0.0, player_count: int = 0 ) -> None: self._execute( """ INSERT INTO metrics (server_id, cpu_percent, ram_mb, player_count) VALUES (:sid, :cpu, :ram, :pc) """, {"sid": server_id, "cpu": cpu_percent, "ram": ram_mb, "pc": player_count}, ) def query( self, server_id: int, from_ts: str | None = None, to_ts: str | None = None, ) -> list[dict]: conditions = ["server_id = :sid"] params: dict = {"sid": server_id} if from_ts: conditions.append("timestamp >= :from_ts") params["from_ts"] = from_ts if to_ts: conditions.append("timestamp <= :to_ts") params["to_ts"] = to_ts where = " AND ".join(conditions) return self._fetchall( f"SELECT * FROM metrics WHERE {where} ORDER BY timestamp ASC", params, ) def get_latest(self, server_id: int) -> dict | None: return self._fetchone( "SELECT * FROM metrics WHERE server_id = :sid ORDER BY timestamp DESC LIMIT 1", {"sid": server_id}, ) def cleanup_old(self, retention_days: int = 1, server_id: int | None = None) -> None: if server_id is not None: self._execute( "DELETE FROM metrics WHERE server_id = :sid AND timestamp < datetime('now', :delta)", {"sid": server_id, "delta": f"-{retention_days} days"}, ) else: self._execute( "DELETE FROM metrics WHERE timestamp < datetime('now', :delta)", {"delta": f"-{retention_days} days"}, )