67 lines
1.7 KiB
Python
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
|