58 lines
1.8 KiB
Python
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()
|