mirror of
https://github.com/OneUptime/oneuptime
synced 2024-11-21 22:59:07 +00:00
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"log/slog"
|
|
"oneuptime-infrastructure-agent/model"
|
|
|
|
"github.com/shirou/gopsutil/v3/disk"
|
|
)
|
|
|
|
// getDiskMetrics retrieves disk metrics for a given path
|
|
func GetDiskMetrics(path string) *model.BasicDiskMetrics {
|
|
usageStat, err := disk.Usage(path)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return nil
|
|
}
|
|
var percentUsed, percentFree float64
|
|
if usageStat.Total != 0 {
|
|
percentUsed = float64(usageStat.Used) / float64(usageStat.Total) * 100
|
|
percentFree = float64(usageStat.Free) / float64(usageStat.Total) * 100
|
|
}
|
|
|
|
metrics := &model.BasicDiskMetrics{
|
|
Total: usageStat.Total,
|
|
Free: usageStat.Free,
|
|
Used: usageStat.Used,
|
|
DiskPath: path,
|
|
PercentUsed: percentUsed,
|
|
PercentFree: percentFree,
|
|
}
|
|
|
|
return metrics
|
|
}
|
|
|
|
// listDiskMetrics lists disk metrics for all partitions
|
|
func ListDiskMetrics() []*model.BasicDiskMetrics {
|
|
partitions, err := disk.Partitions(false) // set to true if you want all filesystems
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return nil
|
|
}
|
|
|
|
var metricsList []*model.BasicDiskMetrics
|
|
for _, partition := range partitions {
|
|
metrics := GetDiskMetrics(partition.Mountpoint)
|
|
if metrics == nil {
|
|
continue // Skip this partition on error
|
|
}
|
|
metricsList = append(metricsList, metrics)
|
|
}
|
|
|
|
return metricsList
|
|
}
|