homelab_automation/app/services/host_status_service.py

58 lines
1.8 KiB
Python

"""
Service de gestion du statut runtime des hôtes.
"""
from datetime import datetime
from typing import Dict, Any, Optional
class HostStatusService:
"""Service simple pour stocker le statut runtime des hôtes en mémoire.
Cette implémentation ne persiste plus dans un fichier JSON ; les données
sont conservées uniquement pendant la vie du processus.
"""
def __init__(self):
# Dictionnaire: host_name -> {"status": str, "last_seen": Optional[datetime|str], "os": Optional[str]}
self._hosts: Dict[str, Dict[str, Any]] = {}
def set_status(
self,
host_name: str,
status: str,
last_seen: Optional[datetime] = None,
os_info: Optional[str] = None
) -> Dict[str, Any]:
"""Met à jour le statut d'un hôte en mémoire."""
entry = {
"status": status,
"last_seen": last_seen if isinstance(last_seen, datetime) else last_seen,
"os": os_info,
}
self._hosts[host_name] = entry
return entry
def get_status(self, host_name: str) -> Dict[str, Any]:
"""Récupère le statut d'un hôte, avec valeurs par défaut si absent."""
return self._hosts.get(host_name, {"status": "online", "last_seen": None, "os": None})
def get_all_status(self) -> Dict[str, Dict[str, Any]]:
"""Retourne une copie de tous les statuts connus."""
return dict(self._hosts)
def remove_host(self, host_name: str) -> bool:
"""Supprime le statut d'un hôte de la mémoire."""
if host_name in self._hosts:
del self._hosts[host_name]
return True
return False
def clear(self):
"""Efface tous les statuts."""
self._hosts.clear()
# Instance singleton du service
host_status_service = HostStatusService()