-
Notifications
You must be signed in to change notification settings - Fork 1
/
metric_vm.go
61 lines (53 loc) · 1.45 KB
/
metric_vm.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package minivmm
import (
"log"
"strconv"
)
// VMMetric is the metrics of resrouces that minivmm manages. It's exported for prometheus.
type VMMetric struct {
CPUCores int `json:"minivmm_cpu_cores"`
CPUCoresRunning int `json:"minivmm_cpu_cores_running"`
MemoryBytes int `json:"minivmm_memory_bytes"`
MemoryBytesRunning int `json:"minivmm_memory_bytes_running"`
DiskBytes int `json:"minivmm_disk_bytes"`
NumVM int `json:"minivmm_vms"`
NumVMRunning int `json:"minivmm_vms_running"`
}
// GetVMMetric returns the resource metrics of the VMs managed by minivmm .
func GetVMMetric() (*VMMetric, error) {
var m VMMetric
vms, err := ListVMs()
if err != nil {
return nil, err
}
m.NumVM = len(vms)
for _, vm := range vms {
cpuStr := vm.CPU
memStr, _ := ConvertSIPrefixedValue(vm.Memory, "")
diskStr, _ := ConvertSIPrefixedValue(vm.Disk, "")
cpu, err := strconv.Atoi(cpuStr)
if err != nil {
log.Printf("failed to parse cpu info, %v\n", err)
continue
}
mem, err := strconv.Atoi(memStr)
if err != nil {
log.Printf("failed to parse memory info, %v\n", err)
continue
}
disk, err := strconv.Atoi(diskStr)
if err != nil {
log.Printf("failed to parse disk info, %v\n", err)
continue
}
m.CPUCores += cpu
m.MemoryBytes += mem
m.DiskBytes += disk
if vm.Status == "running" {
m.NumVMRunning += 1
m.CPUCoresRunning += cpu
m.MemoryBytesRunning += mem
}
}
return &m, nil
}