Dérive l'état de santé de 5 capteurs par site et un statut overall depuis la dernière lecture (data_quality, null_reasons, nullité des colonnes), sur le gabarit d'agrégation de StatsService. Route réservée au rôle admin.
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class SensorDiagnosticResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
status: Literal["ok", "failing"]
|
|
since: datetime | None = Field(
|
|
description=(
|
|
"Horodatage de la dernière lecture reçue pour ce site. Ce n'est pas le début de la "
|
|
"panne : l'historique ne permet pas de le dater sans requête supplémentaire."
|
|
)
|
|
)
|
|
|
|
|
|
class SiteSensorsResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
consumption: SensorDiagnosticResponse
|
|
electrical: SensorDiagnosticResponse
|
|
temperature: SensorDiagnosticResponse
|
|
humidity: SensorDiagnosticResponse
|
|
network: SensorDiagnosticResponse
|
|
|
|
|
|
class SiteSensorStatusResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
site_id: str
|
|
site_name: str
|
|
sensors: SiteSensorsResponse
|
|
overall: Literal["ok", "degraded", "critical"]
|
|
|
|
|
|
class SensorStatusResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
timestamp: datetime
|
|
sites: list[SiteSensorStatusResponse]
|