From b6cc5abc639ba85aaf602476d15c7705e5658268 Mon Sep 17 00:00:00 2001 From: zeaslity Date: Thu, 27 Feb 2025 15:15:55 +0800 Subject: [PATCH] Refactor Disk and Memory Size Formatting with Centralized Utility Function - Extracted common size formatting logic to a new utility function `HumanSize` in utils package - Removed duplicate size formatting code from Disk and Memory configurations - Updated Disk and Memory modules to use the centralized size formatting utility - Uncommented and implemented disk usage calculation in Disk configuration - Improved code readability and maintainability by centralizing size conversion logic --- agent-wdd/config/Disk.go | 63 ++++++++++++-------------------- agent-wdd/config/Memory.go | 21 ++--------- agent-wdd/utils/DownloadUtils.go | 3 ++ agent-wdd/utils/FormatUtils.go | 40 ++++++++++++++++++++ 4 files changed, 70 insertions(+), 57 deletions(-) create mode 100644 agent-wdd/utils/FormatUtils.go diff --git a/agent-wdd/config/Disk.go b/agent-wdd/config/Disk.go index e6c8729..1745c68 100644 --- a/agent-wdd/config/Disk.go +++ b/agent-wdd/config/Disk.go @@ -2,10 +2,11 @@ package config import ( "agent-wdd/log" + "agent-wdd/utils" "bufio" + "fmt" "os" "path/filepath" - "strconv" "strings" ) @@ -80,47 +81,31 @@ func DiskListGather() { } func (disk *Disk) calculateDiskUsage() { - // var stat unix.Statfs_t - // err := unix.Statfs(disk.Path, &stat) - // if err != nil { - // log.Error("disk syscall error: %v", err) - // disk.Size = "0B" - // disk.Usage = "0B" - // disk.Percent = "0.00%" - // return - // } - - // // 计算存储空间大小 - // totalBytes := stat.Blocks * uint64(stat.Bsize) - // availBytes := stat.Bavail * uint64(stat.Bsize) - // usedBytes := totalBytes - availBytes - - // // 格式化输出 - // disk.Size = formatDiskSize(totalBytes) - // disk.Usage = formatDiskSize(usedBytes) - - // if totalBytes == 0 { - // disk.Percent = "0.00%" - // } else { - // percent := float64(usedBytes) / float64(totalBytes) * 100 - // disk.Percent = fmt.Sprintf("%.2f%%", percent) - // } -} - -func formatDiskSize(bytes uint64) string { - units := []string{"B", "KB", "MB", "GB", "TB", "PB"} - var unitIndex int - size := float64(bytes) - - for size >= 1000 && unitIndex < len(units)-1 { - size /= 1000 - unitIndex++ + var stat unix.Statfs_t + err := unix.Statfs(disk.Path, &stat) + if err != nil { + log.Error("disk syscall error: %v", err) + disk.Size = "0B" + disk.Usage = "0B" + disk.Percent = "0.00%" + return } - if unitIndex == 0 { - return strconv.FormatUint(bytes, 10) + units[unitIndex] + // 计算存储空间大小 + totalBytes := stat.Blocks * uint64(stat.Bsize) + availBytes := stat.Bavail * uint64(stat.Bsize) + usedBytes := totalBytes - availBytes + + // 格式化输出 + disk.Size = utils.HumanDiskSize(totalBytes) + disk.Usage = utils.HumanDiskSize(usedBytes) + + if totalBytes == 0 { + disk.Percent = "0.00%" + } else { + percent := float64(usedBytes) / float64(totalBytes) * 100 + disk.Percent = fmt.Sprintf("%.2f%%", percent) } - return strconv.FormatFloat(size, 'f', 1, 64) + units[unitIndex] } func DiskListSaveConfig() { diff --git a/agent-wdd/config/Memory.go b/agent-wdd/config/Memory.go index 1a703e0..06298af 100644 --- a/agent-wdd/config/Memory.go +++ b/agent-wdd/config/Memory.go @@ -2,6 +2,7 @@ package config import ( "agent-wdd/log" + "agent-wdd/utils" "os" "os/exec" "strconv" @@ -27,7 +28,7 @@ func (mem *Memory) Gather() { if err != nil { mem.Size = "0B" } else { - mem.Size = formatSize(kb * 1024) + mem.Size = utils.HumanSize(kb * 1024) } break } @@ -127,26 +128,10 @@ func (swap *Swap) Gather() { swap.Size = "0B" } else { swap.Open = true - swap.Size = formatSize(totalKB * 1024) + swap.Size = utils.HumanSize(totalKB * 1024) } } -func formatSize(bytes uint64) string { - units := []string{"B", "KB", "MB", "GB", "TB", "PB"} - var unitIndex int - size := float64(bytes) - - for size >= 1024 && unitIndex < len(units)-1 { - size /= 1024 - unitIndex++ - } - - if unitIndex == 0 { - return strconv.FormatUint(bytes, 10) + units[unitIndex] - } - return strconv.FormatFloat(size, 'f', 1, 64) + units[unitIndex] -} - func (swap *Swap) SaveConfig() { log.Info("Saving INFO => SWAP !") diff --git a/agent-wdd/utils/DownloadUtils.go b/agent-wdd/utils/DownloadUtils.go index 599b586..5e0f78f 100644 --- a/agent-wdd/utils/DownloadUtils.go +++ b/agent-wdd/utils/DownloadUtils.go @@ -46,6 +46,9 @@ func downloadWithProgress(client *http.Client, url, dest string) (bool, string) size := resp.ContentLength var downloaded int64 + // 打印下载信息 + fmt.Printf("开始下载文件: %s 文件大小: %s\n", url, HumanSizeInt(size)) + // 创建带进度跟踪的Reader progressReader := &progressReader{ Reader: resp.Body, diff --git a/agent-wdd/utils/FormatUtils.go b/agent-wdd/utils/FormatUtils.go new file mode 100644 index 0000000..6611d4b --- /dev/null +++ b/agent-wdd/utils/FormatUtils.go @@ -0,0 +1,40 @@ +package utils + +import "strconv" + +func HumanSize(bytes uint64) string { + units := []string{"B", "KB", "MB", "GB", "TB", "PB"} + var unitIndex int + size := float64(bytes) + + for size >= 1024 && unitIndex < len(units)-1 { + size /= 1024 + unitIndex++ + } + + if unitIndex == 0 { + return strconv.FormatUint(bytes, 10) + units[unitIndex] + } + + return strconv.FormatFloat(size, 'f', 1, 64) + units[unitIndex] +} + +func HumanSizeInt(bytes int64) string { + return HumanSize(uint64(bytes)) +} + +func HumanDiskSize(bytes uint64) string { + units := []string{"B", "KB", "MB", "GB", "TB", "PB"} + var unitIndex int + size := float64(bytes) + + for size >= 1000 && unitIndex < len(units)-1 { + size /= 1000 + unitIndex++ + } + + if unitIndex == 0 { + return strconv.FormatUint(bytes, 10) + units[unitIndex] + } + return strconv.FormatFloat(size, 'f', 1, 64) + units[unitIndex] +}