"use client" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { ScrollArea } from "@/components/ui/scroll-area" import { FileText, Search, Download, AlertTriangle, Info, CheckCircle, XCircle } from "lucide-react" import { useState } from "react" const systemLogs = [ { timestamp: "2024-01-15 14:32:15", level: "info", service: "pveproxy", message: "User root@pam authenticated successfully", source: "auth.log", }, { timestamp: "2024-01-15 14:31:45", level: "warning", service: "pvedaemon", message: "VM 101 high memory usage detected (85%)", source: "syslog", }, { timestamp: "2024-01-15 14:30:22", level: "error", service: "pve-cluster", message: "Failed to connect to cluster node pve-02", source: "cluster.log", }, { timestamp: "2024-01-15 14:29:18", level: "info", service: "pvestatd", message: "Storage local: 1.25TB used, 750GB available", source: "syslog", }, { timestamp: "2024-01-15 14:28:33", level: "info", service: "pve-firewall", message: "Blocked connection attempt from 192.168.1.50", source: "firewall.log", }, { timestamp: "2024-01-15 14:27:45", level: "warning", service: "smartd", message: "SMART warning: /dev/nvme0n1 temperature high (55°C)", source: "smart.log", }, { timestamp: "2024-01-15 14:26:12", level: "info", service: "pveproxy", message: "Started backup job for VM 100", source: "backup.log", }, { timestamp: "2024-01-15 14:25:38", level: "error", service: "qemu-server", message: "VM 102 failed to start: insufficient memory", source: "qemu.log", }, { timestamp: "2024-01-15 14:24:55", level: "info", service: "pvedaemon", message: "VM 103 migrated successfully to node pve-01", source: "migration.log", }, { timestamp: "2024-01-15 14:23:17", level: "warning", service: "pve-ha-lrm", message: "Resource VM:104 state changed to error", source: "ha.log", }, ] export function SystemLogs() { const [searchTerm, setSearchTerm] = useState("") const [levelFilter, setLevelFilter] = useState("all") const [serviceFilter, setServiceFilter] = useState("all") const filteredLogs = systemLogs.filter((log) => { const matchesSearch = log.message.toLowerCase().includes(searchTerm.toLowerCase()) || log.service.toLowerCase().includes(searchTerm.toLowerCase()) const matchesLevel = levelFilter === "all" || log.level === levelFilter const matchesService = serviceFilter === "all" || log.service === serviceFilter return matchesSearch && matchesLevel && matchesService }) const getLevelColor = (level: string) => { switch (level) { case "error": return "bg-red-500/10 text-red-500 border-red-500/20" case "warning": return "bg-yellow-500/10 text-yellow-500 border-yellow-500/20" case "info": return "bg-blue-500/10 text-blue-500 border-blue-500/20" default: return "bg-gray-500/10 text-gray-500 border-gray-500/20" } } const getLevelIcon = (level: string) => { switch (level) { case "error": return case "warning": return case "info": return default: return } } const logCounts = { total: systemLogs.length, error: systemLogs.filter((log) => log.level === "error").length, warning: systemLogs.filter((log) => log.level === "warning").length, info: systemLogs.filter((log) => log.level === "info").length, } const uniqueServices = [...new Set(systemLogs.map((log) => log.service))] return (
{/* Log Statistics */}
Total Logs
{logCounts.total}

Last 24 hours

Errors
{logCounts.error}

Requires attention

Warnings
{logCounts.warning}

Monitor closely

Info
{logCounts.info}

Normal operations

{/* Log Filters and Search */} System Logs
setSearchTerm(e.target.value)} className="pl-10 bg-background border-border" />
{filteredLogs.map((log, index) => (
{getLevelIcon(log.level)} {log.level.toUpperCase()}
{log.service}
{log.timestamp}
{log.message}
Source: {log.source}
))} {filteredLogs.length === 0 && (

No logs found matching your criteria

)}
) }