/* eslint-disable @typescript-eslint/no-explicit-any */
import { createFileRoute } from '@tanstack/react-router'
import { useEffect } from 'react'
import { useHardware } from '@/hooks/useHardware'
import { Progress } from '@/components/ui/progress'
import { route } from '@/constants/routes'
import { formatMegaBytes } from '@/lib/utils'
import { IconDeviceDesktopAnalytics } from '@tabler/icons-react'
import { useTranslation } from '@/i18n/react-i18next-compat'
import { toNumber } from '@/utils/number'
import { useLlamacppDevices } from '@/hooks/useLlamacppDevices'
import { useServiceHub } from '@/hooks/useServiceHub'
import { PlatformGuard } from '@/lib/platform/PlatformGuard'
import { PlatformFeature } from '@/lib/platform'
export const Route = createFileRoute(route.systemMonitor as any)({
component: SystemMonitor,
})
function SystemMonitor() {
return (
)
}
function SystemMonitorContent() {
const { t } = useTranslation()
const { hardwareData, systemUsage, updateSystemUsage } = useHardware()
const serviceHub = useServiceHub()
const { devices: llamacppDevices, fetchDevices } = useLlamacppDevices()
useEffect(() => {
// Fetch llamacpp devices
fetchDevices()
}, [updateSystemUsage, fetchDevices])
// Poll system usage every 5 seconds
useEffect(() => {
const intervalId = setInterval(() => {
serviceHub.hardware().getSystemUsage()
.then((data) => {
if (data) {
updateSystemUsage(data)
}
})
.catch((error) => {
console.error('Failed to get system usage:', error)
})
}, 5000)
return () => clearInterval(intervalId)
}, [updateSystemUsage, serviceHub])
// Calculate RAM usage percentage
const ramUsagePercentage =
toNumber(systemUsage.used_memory / hardwareData.total_memory) * 100
return (
{t('system-monitor:title')}
{/* CPU Usage Card */}
{t('system-monitor:cpuUsage')}
{t('system-monitor:model')}
{hardwareData.cpu.name}
{t('system-monitor:cores')}
{hardwareData.cpu.core_count}
{t('system-monitor:architecture')}
{hardwareData.cpu.arch}
{t('system-monitor:currentUsage')}
{systemUsage.cpu.toFixed(2)}%
{/* RAM Usage Card */}
{t('system-monitor:memoryUsage')}
{t('system-monitor:totalRam')}
{formatMegaBytes(hardwareData.total_memory)}
{t('system-monitor:availableRam')}
{formatMegaBytes(
hardwareData.total_memory - systemUsage.used_memory
)}
{t('system-monitor:usedRam')}
{formatMegaBytes(systemUsage.used_memory)}
{t('system-monitor:currentUsage')}
{ramUsagePercentage.toFixed(2)}%
{/* GPU Usage Card */}
{!IS_MACOS && (
{t('system-monitor:activeGpus')}
{llamacppDevices.length > 0 ? (
llamacppDevices.map((device) => (
{device.name}
{device.activated
? t('system-monitor:active')
: 'Inactive'}
VRAM:
{formatMegaBytes(device.mem)}
Free:
{formatMegaBytes(device.free)}
))
) : (
{t('system-monitor:noGpus')}
)}
)}
)
}