// 主机监控 — 磁盘监控 Tab (磁盘使用/Inode/IO读写/IO繁忙度) import { HardDrive, Disc } from 'lucide-react'; import type { AggType, BucketPoint, RefLine } from '../types'; import type { JsonData } from '@/types/common'; import { MetricChartCard } from '../MetricChartCard'; import { parseJSON } from '../utils'; import i18n from '@/i18n'; export interface DiskTabProps { metrics: { disk: BucketPoint[]; inode: BucketPoint[]; ioRead: BucketPoint[]; ioWrite: BucketPoint[]; ioUtil: BucketPoint[]; }; latest: JsonData; currentVal: (key: string, fallback?: string) => string; aggType: AggType; pctRefLines: RefLine[]; diskIOInfo: JsonData; } export function DiskTab({ metrics, latest, currentVal, aggType, pctRefLines, diskIOInfo }: DiskTabProps) { const inodeVal = (() => { const dArr = Array.isArray(parseJSON(latest?.disk_info)) ? parseJSON(latest?.disk_info) : []; const root = dArr.find((d: JsonData) => d.mount === '/') || dArr[0]; return root?.inode_usage_pct != null ? `${root.inode_usage_pct.toFixed(1)}%` : '--'; })(); return (
} iconTone="orange" data={metrics.disk} color="#f97316" unit="%" domain={[0, 100]} aggType={aggType} referenceLines={pctRefLines} /> } iconTone="purple" data={metrics.inode} color="#8b5cf6" unit="%" domain={[0, 100]} aggType={aggType} referenceLines={pctRefLines} /> } iconTone="blue" data={metrics.ioRead} color="#3b82f6" unit="KB/s" domain={[0, 'auto']} aggType={aggType} /> } iconTone="green" data={metrics.ioWrite} color="#10b981" unit="KB/s" domain={[0, 'auto']} aggType={aggType} /> } iconTone="red" data={metrics.ioUtil} color="#ef4444" unit="%" domain={[0, 100]} aggType={aggType} referenceLines={pctRefLines} />
); }