From 32892f2d2cdba1ea49fe0fca9129b930120ed9a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mert=20=C5=9Ei=C5=9Fmano=C4=9Flu?= Date: Fri, 6 Dec 2024 21:29:44 +0300 Subject: [PATCH] ref(disk-metrics): Refactor CollectDiskMetrics to use Device instead of MountPoint and improve partition filtering --- internal/metric/disk.go | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/internal/metric/disk.go b/internal/metric/disk.go index 0118cea..20f4d0b 100644 --- a/internal/metric/disk.go +++ b/internal/metric/disk.go @@ -1,13 +1,16 @@ package metric import ( + "slices" + "strings" + "github.com/shirou/gopsutil/v4/disk" ) func CollectDiskMetrics() (MetricsSlice, []CustomErr) { defaultDiskData := []*DiskData{ { - MountPoint: "", + Device: "", ReadSpeedBytes: nil, WriteSpeedBytes: nil, TotalBytes: nil, @@ -17,8 +20,9 @@ func CollectDiskMetrics() (MetricsSlice, []CustomErr) { } var diskErrors []CustomErr var metricsSlice MetricsSlice + var checkedSlice []string // To keep track of checked partitions - // Set all flag to false to get only necessary partitions + // Set all flag to "false" to get only necessary partitions // Avoiding unnecessary partitions like /run/user/1000, /run/credentials partitions, partErr := disk.Partitions(false) @@ -30,18 +34,23 @@ func CollectDiskMetrics() (MetricsSlice, []CustomErr) { } for _, p := range partitions { - diskUsage, diskUsageErr := disk.Usage(p.Mountpoint) + // Filter out partitions that are already checked or not a device + if slices.Contains(checkedSlice, p.Device) || !strings.HasPrefix(p.Device, "/dev") { + continue + } + diskUsage, diskUsageErr := disk.Usage(p.Mountpoint) if diskUsageErr != nil { diskErrors = append(diskErrors, CustomErr{ Metric: []string{"disk.usage_percent", "disk.total_bytes", "disk.free_bytes"}, - Error: diskUsageErr.Error() + p.Mountpoint, + Error: diskUsageErr.Error() + " " + p.Mountpoint, }) - return MetricsSlice{defaultDiskData[0]}, diskErrors + continue } + checkedSlice = append(checkedSlice, p.Device) metricsSlice = append(metricsSlice, &DiskData{ - MountPoint: diskUsage.Path, + Device: p.Device, ReadSpeedBytes: nil, // TODO: Implement WriteSpeedBytes: nil, // TODO: Implement TotalBytes: &diskUsage.Total, @@ -50,6 +59,10 @@ func CollectDiskMetrics() (MetricsSlice, []CustomErr) { }) } + if len(diskErrors) != 0 { + return MetricsSlice{defaultDiskData[0]}, diskErrors + } + return metricsSlice, diskErrors }