import { useState, useEffect } from 'react'; import { pb } from '../../config/pocketbase'; interface InfrastructureNode { id: string; label: string; type: string; status: string; uptime_sla: string; } export default function UptimeWidget() { const [nodes, setNodes] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const fetchNodes = async () => { try { // Récupération sécurisée filtrée automatiquement par le Token JWT de la compagnie const records = await pb.collection('aegis_infrastructure_nodes').getFullList({ sort: 'created', }); setNodes(records); } catch (error) { console.error("Erreur lors de la récupération des nœuds :", error); } finally { setIsLoading(false); } }; fetchNodes(); }, []); // Fonction pour adapter dynamiquement la couleur du badge selon le statut renvoyé par la base const getStatusStyle = (status: string) => { switch (status) { case 'Opérationnel': return { bg: 'bg-emerald-50 text-emerald-600 border-emerald-100', dot: 'bg-emerald-500' }; case 'Dégradé': return { bg: 'bg-amber-50 text-amber-600 border-amber-100', dot: 'bg-amber-500' }; case 'Hors Ligne': return { bg: 'bg-red-50 text-red-600 border-red-100', dot: 'bg-red-500' }; default: return { bg: 'bg-slate-50 text-slate-600 border-slate-100', dot: 'bg-slate-400' }; } }; return (

État des Services & SLA

{isLoading ? (
) : nodes.length === 0 ? (
Aucun équipement enregistré pour ce contrat.
) : (
{nodes.map((node) => { const style = getStatusStyle(node.status); return (

{node.label}

{node.type}

SLA

{node.uptime_sla}%

{node.status}
); })}
)}
); }