import { useState, useEffect, useRef } from 'react'; import DroneMonitorGauge from './DroneMonitorGauge'; interface DroneMonitorProps { visible: boolean; } function generateWave(base: number, variance: number, length: number): number[] { const wave: number[] = []; for (let i = 0; i < length; i++) { wave.push(base + Math.sin(i * 0.1) * variance + (Math.random() - 0.5) * variance * 0.5); } return wave; } export default function DroneMonitor({ visible }: DroneMonitorProps) { const [cpuData, setCpuData] = useState(() => generateWave(35, 20, 60)); const [netData, setNetData] = useState(() => generateWave(20, 15, 60)); const [ioData, setIoData] = useState(() => generateWave(10, 10, 60)); const intervalRef = useRef | null>(null); useEffect(() => { if (!visible) { if (intervalRef.current) { clearInterval(intervalRef.current); intervalRef.current = null; } return; } intervalRef.current = setInterval(() => { setCpuData((prev) => { const next = [...prev.slice(1), Math.max(0, Math.min(100, prev[prev.length - 1]! + (Math.random() - 0.5) * 10))]; return next; }); setNetData((prev) => { const next = [...prev.slice(1), Math.max(0, Math.min(100, prev[prev.length - 1]! + (Math.random() - 0.5) * 8))]; return next; }); setIoData((prev) => { const next = [...prev.slice(1), Math.max(0, Math.min(100, prev[prev.length - 1]! + (Math.random() - 0.5) * 6))]; return next; }); }, 200); return () => { if (intervalRef.current) { clearInterval(intervalRef.current); intervalRef.current = null; } }; }, [visible]); return (

Resource Monitor

); }