From 4ec33e1c8c7e0bfb1f206abb5536fe8162f8eb0c Mon Sep 17 00:00:00 2001 From: Saeed Vaziry Date: Sat, 13 Apr 2024 20:46:37 +0200 Subject: [PATCH] fix disk usage --- cmd/agent.go | 6 +++--- pkg/disk/disk.go | 35 ++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/cmd/agent.go b/cmd/agent.go index fa3819c..540f542 100644 --- a/cmd/agent.go +++ b/cmd/agent.go @@ -15,9 +15,9 @@ import ( type Payload struct { Load float64 `json:"load"` - DiskTotal uint64 `json:"disk_total"` - DiskFree uint64 `json:"disk_free"` - DiskUsed uint64 `json:"disk_used"` + DiskTotal string `json:"disk_total"` + DiskFree string `json:"disk_free"` + DiskUsed string `json:"disk_used"` MemoryTotal string `json:"memory_total"` MemoryFree string `json:"memory_free"` MemoryUsed string `json:"memory_used"` diff --git a/pkg/disk/disk.go b/pkg/disk/disk.go index 4c0f8b6..473c47f 100644 --- a/pkg/disk/disk.go +++ b/pkg/disk/disk.go @@ -2,13 +2,14 @@ package disk import ( "fmt" - "syscall" + "os/exec" + "strings" ) type DiskInfo struct { - Total uint64 - Free uint64 - Used uint64 + Total string + Free string + Used string } func GetDiskInfo() DiskInfo { @@ -24,13 +25,29 @@ func GetDiskInfo() DiskInfo { // DiskUsage returns the disk usage of the path in bytes func diskUsage(path string) (usage DiskInfo, err error) { - fs := &syscall.Statfs_t{} - err = syscall.Statfs(path, fs) + // Run the df command to get disk information + cmd := exec.Command("df", "-BM", path) // Use -BM option to get sizes in megabytes + output, err := cmd.Output() if err != nil { + fmt.Println("Error running df command:", err) return } - usage.Total = (fs.Blocks * uint64(fs.Bsize)) / (1024 * 1024) - usage.Free = (fs.Bfree * uint64(fs.Bsize)) / (1024 * 1024) - usage.Used = usage.Total - usage.Free + + // Parse the output to get disk total, usage, and free + lines := strings.Split(string(output), "\n") + if len(lines) < 2 { + fmt.Println("Unexpected output from df command") + return + } + + fields := strings.Fields(lines[1]) + if len(fields) < 4 { + fmt.Println("Unexpected output format") + return + } + + usage.Total = strings.Replace(fields[1], "M", "", 1) + usage.Used = strings.Replace(fields[2], "M", "", 1) + usage.Free = strings.Replace(fields[3], "M", "", 1) return }