67 lines
1.7 KiB
Python

"""
Schémas Pydantic communs utilisés dans plusieurs modules.
"""
from datetime import datetime, timezone
from typing import Optional, Literal, Dict, Any
from pydantic import BaseModel, Field, ConfigDict
class CommandResult(BaseModel):
"""Résultat d'une commande SSH ou Ansible."""
status: str
return_code: int
stdout: str
stderr: Optional[str] = None
execution_time: Optional[float] = None
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class LogEntry(BaseModel):
"""Entrée de log (modèle mémoire)."""
id: int = 0
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
level: Literal["DEBUG", "INFO", "WARN", "WARNING", "ERROR"] = "INFO"
message: str
source: Optional[str] = None
host: Optional[str] = None
model_config = ConfigDict(
json_encoders={datetime: lambda v: v.isoformat()}
)
class SystemMetrics(BaseModel):
"""Métriques système du dashboard."""
online_hosts: int = 0
total_tasks: int = 0
success_rate: float = 100.0
uptime: float = 99.9
cpu_usage: float = 0.0
memory_usage: float = 0.0
disk_usage: float = 0.0
class PaginatedResponse(BaseModel):
"""Réponse paginée générique."""
items: list = Field(default_factory=list)
count: int = 0
total_count: int = 0
has_more: bool = False
limit: int = 50
offset: int = 0
class SuccessResponse(BaseModel):
"""Réponse de succès générique."""
success: bool = True
message: str
class ErrorResponse(BaseModel):
"""Réponse d'erreur générique."""
error: str
message: str
details: Optional[Dict[str, Any]] = None