[Agent] [Status] agent metric accomplish

This commit is contained in:
zeaslity
2023-12-21 11:39:19 +08:00
parent 8becc27472
commit 53f4f526cf
9 changed files with 246 additions and 49 deletions

View File

@@ -1,9 +1,9 @@
package status
import (
"agent-go/utils"
"fmt"
"github.com/shirou/gopsutil/v3/disk"
"regexp"
"time"
)
@@ -14,7 +14,13 @@ type DiskStatus struct {
}
type DiskInfo struct {
DiskPartition []disk.PartitionStat
Device string `json:"device"`
Mountpoint string `json:"mountpoint"`
Fstype string `json:"fstype"`
Total uint64 `json:"total"`
Free uint64 `json:"free"`
Used uint64 `json:"used"`
UsedPercent float64 `json:"usedPercent"`
}
func GetDiskStatus() *DiskStatus {
@@ -36,20 +42,43 @@ func GetDiskStatus() *DiskStatus {
return ds
}
func GetDiskInfo() (*DiskInfo, error) {
func GetDiskInfo() ([]DiskInfo, error) {
partitionStats, err := disk.Partitions(true)
partitionStats, err := disk.Partitions(false)
if err != nil {
log.ErrorF("[GetDiskInfo] - get disk partition info error ! => %v", err)
return nil, err
}
d := &DiskInfo{}
var result []DiskInfo
for _, partitionStat := range partitionStats {
utils.BeautifulPrint(partitionStat)
if !MatchNeededDisk(partitionStat.Device) {
continue
}
usageStat, err := disk.Usage(partitionStat.Mountpoint)
if err != nil {
log.ErrorF("[GetDiskInfo] - device [%s] get mount point [%s] usage error => %v", partitionStat.Device, partitionStat.Mountpoint, err)
return nil, err
}
// new disk info
diskInfo := DiskInfo{
Device: partitionStat.Device,
Mountpoint: partitionStat.Mountpoint,
Fstype: partitionStat.Fstype,
Total: usageStat.Total,
Free: usageStat.Free,
Used: usageStat.Used,
UsedPercent: usageStat.UsedPercent,
}
// assign
result = append(result, diskInfo)
}
return d, nil
return result, nil
}
func CalculateDiskIO() {
@@ -67,3 +96,24 @@ func CalculateDiskIO() {
fmt.Printf("%v: read %vKB/s, write %vKB/s\n", device, readSpeed, writeSpeed)
}
}
func MatchNeededDisk(deviceName string) bool {
match, _ := regexp.MatchString(`^(/dev/loop)\d+`, deviceName)
if match {
return false
}
//if strings.HasPrefix(deviceName, "/sys") {
// return false
//}
//if strings.HasPrefix(deviceName, "/run") {
// return false
//}
//if strings.HasPrefix(deviceName, "/snap") {
// return false
//}
//if strings.HasPrefix(deviceName, "tracefs") {
// return false
//}
return true
}