face-intel / models /health.py
Marwan
Restructure + add reverse face search (PimEyes-style)
f5eeb1c
Raw
History Blame Contribute Delete
1.23 kB
"""Health-related domain models."""
from __future__ import annotations
from datetime import datetime, timezone
from typing import Dict, List, Optional
from pydantic import BaseModel, Field
class ProviderHealthSnapshot(BaseModel):
"""Per-provider health snapshot used by the circuit breaker + API."""
name: str
healthy: bool
consecutive_failures: int = 0
last_success: Optional[datetime] = None
last_failure: Optional[datetime] = None
last_check: Optional[datetime] = None
avg_latency_ms: float = 0.0
circuit_open: bool = False
circuit_opened_at: Optional[datetime] = None
metadata: dict = Field(default_factory=dict)
class SystemHealthSnapshot(BaseModel):
"""Aggregate system health."""
status: str = "healthy" # healthy | degraded | unhealthy
version: str = "1.0.0"
uptime_seconds: float = 0.0
providers: List[ProviderHealthSnapshot] = Field(default_factory=list)
cache: dict = Field(default_factory=dict)
metrics: dict = Field(default_factory=dict)
class HealthSnapshot(BaseModel):
"""Convenience alias."""
system: SystemHealthSnapshot
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))