"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardHeader, CardTitle } from "./ui/card" import { Badge } from "./ui/badge" import { Wifi, Globe, Shield, Activity, Network, Router, AlertCircle } from "lucide-react" interface NetworkData { interfaces: NetworkInterface[] traffic: { bytes_sent: number bytes_recv: number packets_sent?: number packets_recv?: number } } interface NetworkInterface { name: string status: string addresses: Array<{ ip: string netmask: string }> } const fetchNetworkData = async (): Promise => { try { console.log("[v0] Fetching network data from Flask server...") const response = await fetch("/api/network", { method: "GET", headers: { "Content-Type": "application/json", }, signal: AbortSignal.timeout(5000), }) if (!response.ok) { throw new Error(`Flask server responded with status: ${response.status}`) } const data = await response.json() console.log("[v0] Successfully fetched network data from Flask:", data) return data } catch (error) { console.error("[v0] Failed to fetch network data from Flask server:", error) return null } } export function NetworkMetrics() { const [networkData, setNetworkData] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { const fetchData = async () => { setLoading(true) setError(null) const result = await fetchNetworkData() if (!result) { setError("Flask server not available. Please ensure the server is running.") } else { setNetworkData(result) } setLoading(false) } fetchData() const interval = setInterval(fetchData, 30000) return () => clearInterval(interval) }, []) if (loading) { return (
Loading network data...
) } if (error || !networkData) { return (
Flask Server Not Available
{error || "Unable to connect to the Flask server. Please ensure the server is running and try again."}
) } const trafficInMB = (networkData.traffic.bytes_recv / (1024 * 1024)).toFixed(1) const trafficOutMB = (networkData.traffic.bytes_sent / (1024 * 1024)).toFixed(1) return (
{/* Network Overview Cards */}
Network Traffic
{trafficInMB} MB
↓ {trafficInMB} MB ↑ {trafficOutMB} MB

Total data transferred

Active Interfaces
{networkData.interfaces.filter((i) => i.status === "up").length}
Online

{networkData.interfaces.length} total interfaces

Firewall Status
Active
Protected

System protected

Packets
{networkData.traffic.packets_recv ? (networkData.traffic.packets_recv / 1000).toFixed(0) : "N/A"}K
Received

Total packets received

{/* Network Interfaces */} Network Interfaces
{networkData.interfaces.map((interface_, index) => (
{interface_.name}
Network Interface
IP Address
{interface_.addresses.length > 0 ? interface_.addresses[0].ip : "N/A"}
Netmask
{interface_.addresses.length > 0 ? interface_.addresses[0].netmask : "N/A"}
{interface_.status.toUpperCase()}
))}
) }