[Agent] [Status] agent metric accomplish
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user