diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 95848f1..d6fa027 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -29,6 +29,7 @@ const App: React.FC = () => { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showThreads, setShowThreads] = useState(false); + const [timeWindow, setTimeWindow] = useState<5 | 15 | 30>(5); // Track previous values for network rate calculation const [prevNetworkRx, setPrevNetworkRx] = useState(0); @@ -282,11 +283,34 @@ const App: React.FC = () => {
+
+
+ {([5, 15, 30] as const).map((w, i) => ( + + ))} +
+
- - - - + + + + {/* {batteryInfo?.available && } */}
; + timeWindow?: 5 | 15 | 30; } -const CPUMonitor: React.FC = ({ data, history = [] }) => { +const CPUMonitor: React.FC = ({ data, history = [], timeWindow = 5 }) => { const [showPerCore, setShowPerCore] = React.useState(true); const usage = data?.usage ?? 0; const cores = data?.cores ?? 0; const perCore = data?.perCore ?? []; - // Get last 5 minutes of data (150 data points at 2-second intervals) + // Slice history to the selected time window (30 data points per minute at 2s intervals) const recentHistory = useMemo(() => { - return history.slice(-150); - }, [history]); + return history.slice(-(timeWindow * 30)); + }, [history, timeWindow]); const chartData = useMemo(() => { if (showPerCore && perCore.length > 0) { diff --git a/src/renderer/components/DiskMonitor.tsx b/src/renderer/components/DiskMonitor.tsx index e1c1328..dccc825 100644 --- a/src/renderer/components/DiskMonitor.tsx +++ b/src/renderer/components/DiskMonitor.tsx @@ -10,17 +10,18 @@ interface DiskMonitorProps { diskRead: number; diskWrite: number; }>; + timeWindow?: 5 | 15 | 30; } -const DiskMonitor: React.FC = ({ data, history = [] }) => { +const DiskMonitor: React.FC = ({ data, history = [], timeWindow = 5 }) => { const read = data?.read ?? 0; const write = data?.write ?? 0; const disks = data?.disks ?? []; - // Get last 5 minutes of data (150 data points at 2-second intervals) + // Slice history to the selected time window (30 data points per minute at 2s intervals) const recentHistory = useMemo(() => { - return history.slice(-150); - }, [history]); + return history.slice(-(timeWindow * 30)); + }, [history, timeWindow]); const chartData = useMemo(() => { return { diff --git a/src/renderer/components/MemoryMonitor.tsx b/src/renderer/components/MemoryMonitor.tsx index 8aa5bad..45e9950 100644 --- a/src/renderer/components/MemoryMonitor.tsx +++ b/src/renderer/components/MemoryMonitor.tsx @@ -11,9 +11,10 @@ interface MemoryMonitorProps { memory: number; swap: number; }>; + timeWindow?: 5 | 15 | 30; } -const MemoryMonitor: React.FC = ({ data, history = [] }) => { +const MemoryMonitor: React.FC = ({ data, history = [], timeWindow = 5 }) => { const total = data?.total ?? 0; const used = data?.used ?? 0; const usagePercent = total > 0 ? (used / total) * 100 : 0; @@ -22,10 +23,10 @@ const MemoryMonitor: React.FC = ({ data, history = [] }) => const usedSwap = data?.usedSwap ?? 0; const swapPercent = totalSwap > 0 ? (usedSwap / totalSwap) * 100 : 0; - // Get last 5 minutes of data (150 data points at 2-second intervals) + // Slice history to the selected time window (30 data points per minute at 2s intervals) const recentHistory = useMemo(() => { - return history.slice(-150); - }, [history]); + return history.slice(-(timeWindow * 30)); + }, [history, timeWindow]); const chartData = useMemo(() => { return { diff --git a/src/renderer/components/NetworkMonitor.tsx b/src/renderer/components/NetworkMonitor.tsx index 5a832e8..e2c32d2 100644 --- a/src/renderer/components/NetworkMonitor.tsx +++ b/src/renderer/components/NetworkMonitor.tsx @@ -23,9 +23,10 @@ interface NetworkMonitorProps { networkRx: number; networkTx: number; }>; + timeWindow?: 5 | 15 | 30; } -const NetworkMonitor: React.FC = ({ data, history = [] }) => { +const NetworkMonitor: React.FC = ({ data, history = [], timeWindow = 5 }) => { const rx = data?.rx ?? 0; const tx = data?.tx ?? 0; const incomingInterfaces = data?.interfaces ?? []; @@ -55,10 +56,10 @@ const NetworkMonitor: React.FC = ({ data, history = [] }) = // Convert map to array for rendering const interfaces = Array.from(persistedInterfaces.values()); - // Get last 5 minutes of data (150 data points at 2-second intervals) + // Slice history to the selected time window (30 data points per minute at 2s intervals) const recentHistory = useMemo(() => { - return history.slice(-150); - }, [history]); + return history.slice(-(timeWindow * 30)); + }, [history, timeWindow]); const chartData = useMemo(() => { return {