Skip to content

Commit

Permalink
ref(disk-metrics): Refactor CollectDiskMetrics to use Device instead …
Browse files Browse the repository at this point in the history
…of MountPoint and improve partition filtering
  • Loading branch information
mertssmnoglu committed Dec 6, 2024
1 parent 41e23e5 commit 32892f2
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions internal/metric/disk.go
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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)

Expand All @@ -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,
Expand All @@ -50,6 +59,10 @@ func CollectDiskMetrics() (MetricsSlice, []CustomErr) {
})
}

if len(diskErrors) != 0 {
return MetricsSlice{defaultDiskData[0]}, diskErrors
}

return metricsSlice, diskErrors
}

Expand Down

0 comments on commit 32892f2

Please sign in to comment.