import React, { useState, useEffect } from 'react';
import {
Activity,
Box,
Container,
Server,
Clock,
TrendingUp,
AlertCircle,
CheckCircle2,
XCircle,
} from 'lucide-react';
import { getApps, getSystemInfo } from '../utils/api';
import StatusBadge from '../components/StatusBadge';
function StatCard({ icon: Icon, label, value, color, subtext }) {
return (
{label}
{value}
{subtext &&
{subtext}
}
);
}
export default function DashboardPage({ apps }) {
const [systemInfo, setSystemInfo] = useState(null);
useEffect(() => {
getSystemInfo()
.then((res) => setSystemInfo(res.data))
.catch(console.error);
}, []);
const onlineApps = apps.filter((a) => a.status === 'online').length;
const offlineApps = apps.filter((a) => a.status === 'offline').length;
const errorApps = apps.filter((a) => a.status === 'error').length;
return (
{/* Header */}
Tableau de bord
Vue d'ensemble de l'infrastructure Manus
{/* Stats Grid */}
{/* System Info + Apps Overview */}
{/* System Info */}
Informations système
Serveur
78.138.58.109 (Recette)
Conteneurs actifs
{systemInfo?.runningContainers || '...'} /{' '}
{systemInfo?.totalContainers || '...'}
Reverse Proxy
Traefik + Let's Encrypt
Heure serveur
{systemInfo?.serverTime
? new Date(systemInfo.serverTime).toLocaleString('fr-FR')
: '...'}
{/* Apps Quick View */}
État des applications
{apps.length === 0 ? (
Aucune application détectée
) : (
{apps.map((app) => (
{app.name}
{app.containerName}
{app.health?.recette?.responseTime && (
{app.health.recette.responseTime}ms
)}
))}
)}
);
}