From 5f48f141cadf32586f3d72eaa2563890b54544be Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 28 Feb 2026 17:54:11 +0800 Subject: [PATCH] fix(systeminfo): Collect all partitions then filter partitions Keep only real disk-like mounts (/, /dev/*, and /mnt/* excluding /mnt/ itself and /mnt/wsl) to avoid noisy or irrelevant entries in disk metrics. Normalize disk map keys to use mountpoints for empty/none and /dev/root devices so usage data remains stable and accessible across environments. --- internal/metrics/systeminfo/system_info.go | 45 +++++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/internal/metrics/systeminfo/system_info.go b/internal/metrics/systeminfo/system_info.go index ce2ffd83..75c72948 100644 --- a/internal/metrics/systeminfo/system_info.go +++ b/internal/metrics/systeminfo/system_info.go @@ -4,6 +4,7 @@ import ( "context" "errors" "net/url" + "strings" "syscall" "time" @@ -152,19 +153,24 @@ func (s *SystemInfo) collectDisksInfo(ctx context.Context, lastResult *SystemInf } } - partitions, err := disk.PartitionsWithContext(ctx, false) + partitions, err := disk.PartitionsWithContext(ctx, true) if err != nil { return err } + s.Disks = make(map[string]disk.UsageStat, len(partitions)) errs := gperr.NewBuilder("failed to get disks info") for _, partition := range partitions { + if !shouldCollectPartition(partition) { + continue + } diskInfo, err := disk.UsageWithContext(ctx, partition.Mountpoint) if err != nil { errs.Add(err) continue } - s.Disks[partition.Device] = diskInfo + key := diskKey(partition) + s.Disks[key] = diskInfo } if errs.HasError() { @@ -176,6 +182,41 @@ func (s *SystemInfo) collectDisksInfo(ctx context.Context, lastResult *SystemInf return nil } +func shouldCollectPartition(partition disk.PartitionStat) bool { + if partition.Mountpoint == "/" { + return true + } + + if partition.Mountpoint == "" { + return false + } + + // includes WSL mounts like /mnt/c, but exclude /mnt/ itself and /mnt/wsl* + if len(partition.Mountpoint) >= len("/mnt/") && + strings.HasPrefix(partition.Mountpoint, "/mnt/") && + !strings.HasPrefix(partition.Mountpoint, "/mnt/wsl") { + return true + } + + if strings.HasPrefix(partition.Device, "/dev/") { + return true + } + + return false +} + +func diskKey(partition disk.PartitionStat) string { + if partition.Device == "" || partition.Device == "none" { + return partition.Mountpoint + } + + if partition.Device == "/dev/root" { + return partition.Mountpoint + } + + return partition.Device +} + func (s *SystemInfo) collectNetworkInfo(ctx context.Context, lastResult *SystemInfo) error { networkIO, err := net.IOCountersWithContext(ctx, false) if err != nil {