import { UserCheck, UserX } from "lucide-react"; import { useTranslation } from "react-i18next"; import { SectionCard } from "@/components/section-card"; interface LoginRecord { user: string; ip: string; time: string; status: "success" | "failed"; } interface LoginStatsMetrics { recentLogins: LoginRecord[]; failedLogins: LoginRecord[]; totalLogins: number; uniqueIPs: number; } interface LoginStatsWidgetProps { metrics: { login_stats?: LoginStatsMetrics } | null; metricsHistory: unknown[]; } export function LoginStatsWidget({ metrics }: LoginStatsWidgetProps) { const { t } = useTranslation(); const loginStats = metrics?.login_stats; const recentLogins = loginStats?.recentLogins ?? []; const failedLogins = loginStats?.failedLogins ?? []; const allLogins = [ ...recentLogins.map((l) => ({ ...l, status: "success" as const })), ...failedLogins.map((l) => ({ ...l, status: "failed" as const })), ] .sort((a, b) => new Date(b.time).getTime() - new Date(a.time).getTime()) .slice(0, 6); return ( } >
{allLogins.length === 0 ? ( {t("serverStats.noRecentLoginData")} ) : ( allLogins.map((login, i) => (
{login.status === "failed" ? ( ) : ( )} {login.user}
{login.ip}
{login.status} {new Date(login.time).toLocaleTimeString()}
)) )}
); }