"""Fleet metric aggregation and API shape.""" from datetime import datetime, timedelta, timezone import pytest from server.utils.fleet_metrics import aggregate_fleet_metrics def test_aggregate_fleet_metrics_averages(): rows = [ { "is_online": "True", "system_info": '{"cpu_usage": 10, "mem_usage": 20, "disk_usage": 30}', }, { "is_online": "True", "system_info": '{"cpu_usage": 30, "mem_usage": 40, "disk_usage": 50}', }, { "is_online": "False", "system_info": '{"cpu_usage": 100, "mem_usage": 100, "disk_usage": 100}', }, ] agg = aggregate_fleet_metrics(rows) assert agg.online_count == 2 assert agg.sample_count == 3 assert agg.cpu_avg == 47 # round((10+30+100)/3) assert agg.mem_avg == 53 assert agg.disk_avg == 60 def test_aggregate_empty(): agg = aggregate_fleet_metrics([]) assert agg.online_count == 0 assert agg.cpu_avg is None @pytest.mark.asyncio async def test_fleet_metrics_api(db_session, test_admin): from server.api.servers import fleet_metrics from server.infrastructure.database.fleet_metric_repo import FleetMetricRepositoryImpl repo = FleetMetricRepositoryImpl(db_session) now = datetime.now(timezone.utc) await repo.insert_sample( recorded_at=now, online_count=100, sample_count=90, cpu_avg=12, mem_avg=45, disk_avg=60, ) await db_session.commit() body = await fleet_metrics(hours=24, admin=test_admin["admin"], db=db_session) assert body["hours"] == 24 assert body["interval_minutes"] == 10 assert len(body["points"]) >= 1 assert body["points"][-1]["cpu_avg"] == 12