초기 커밋

This commit is contained in:
2026-03-01 07:44:19 +09:00
commit 09359f30be
146 changed files with 6120 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
from __future__ import annotations
from datetime import datetime
from app.models.mongodb.device_log import DeviceLog
async def analyze_device_status(
device_id: str, start: datetime, end: datetime
) -> dict:
"""Analyze device status changes over a period."""
logs = await (
DeviceLog.find(
DeviceLog.device_id == device_id,
DeviceLog.event_type == "status_change",
DeviceLog.timestamp >= start,
DeviceLog.timestamp <= end,
)
.sort("+timestamp")
.to_list()
)
status_counts: dict[str, int] = {}
for log in logs:
status = log.payload.get("status", "unknown")
status_counts[status] = status_counts.get(status, 0) + 1
total_events = len(logs)
uptime_events = status_counts.get("online", 0)
uptime_ratio = uptime_events / total_events if total_events > 0 else 0.0
return {
"total_events": total_events,
"status_counts": status_counts,
"uptime_ratio": round(uptime_ratio, 4),
"period": {"start": start.isoformat(), "end": end.isoformat()},
}