diff --git a/collector/fixtures/node_qemu_pressure.json b/collector/fixtures/node_qemu_pressure.json new file mode 100644 index 0000000..4418d4f --- /dev/null +++ b/collector/fixtures/node_qemu_pressure.json @@ -0,0 +1 @@ +{"data":[{"vmid":112,"status":"running","name":"karmada","cpus":4,"pressurecpusome":1.5,"pressurecpufull":0.3,"pressurememorysome":2.1,"pressurememoryfull":0.0,"pressureiosome":0.8,"pressureiofull":0.1,"mem":6287664128,"maxmem":8589934592},{"vmid":104,"status":"stopped","name":"test3","cpus":2,"mem":0,"maxmem":4294967296}]} diff --git a/collector/vm_pressure_test.go b/collector/vm_pressure_test.go new file mode 100644 index 0000000..03e28bc --- /dev/null +++ b/collector/vm_pressure_test.go @@ -0,0 +1,52 @@ +package collector + +import ( + "log/slog" + "strings" + "testing" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/testutil" +) + +func TestVMPressureCollector(t *testing.T) { + client := newTestClient(t, map[string]string{ + "/nodes/node01/qemu": "node_qemu_pressure.json", + }) + + collector := newVMPressureCollector(slog.Default()) + collector.SetNodes([]string{"node01"}) + adapter := &testCollectorAdapter{client: client, collector: collector} + + reg := prometheus.NewRegistry() + reg.MustRegister(adapter) + + expected := ` +# HELP pve_vm_pressure_cpu_full_ratio CPU pressure (full) ratio. +# TYPE pve_vm_pressure_cpu_full_ratio gauge +pve_vm_pressure_cpu_full_ratio{id="qemu/112",node="node01"} 0.003 +# HELP pve_vm_pressure_cpu_some_ratio CPU pressure (some) ratio. +# TYPE pve_vm_pressure_cpu_some_ratio gauge +pve_vm_pressure_cpu_some_ratio{id="qemu/112",node="node01"} 0.015 +# HELP pve_vm_pressure_io_full_ratio I/O pressure (full) ratio. +# TYPE pve_vm_pressure_io_full_ratio gauge +pve_vm_pressure_io_full_ratio{id="qemu/112",node="node01"} 0.001 +# HELP pve_vm_pressure_io_some_ratio I/O pressure (some) ratio. +# TYPE pve_vm_pressure_io_some_ratio gauge +pve_vm_pressure_io_some_ratio{id="qemu/112",node="node01"} 0.008 +# HELP pve_vm_pressure_memory_full_ratio Memory pressure (full) ratio. +# TYPE pve_vm_pressure_memory_full_ratio gauge +pve_vm_pressure_memory_full_ratio{id="qemu/112",node="node01"} 0 +# HELP pve_vm_pressure_memory_some_ratio Memory pressure (some) ratio. +# TYPE pve_vm_pressure_memory_some_ratio gauge +pve_vm_pressure_memory_some_ratio{id="qemu/112",node="node01"} 0.021 +` + + if err := testutil.GatherAndCompare(reg, strings.NewReader(expected), + "pve_vm_pressure_cpu_some_ratio", "pve_vm_pressure_cpu_full_ratio", + "pve_vm_pressure_memory_some_ratio", "pve_vm_pressure_memory_full_ratio", + "pve_vm_pressure_io_some_ratio", "pve_vm_pressure_io_full_ratio", + ); err != nil { + t.Errorf("unexpected metrics: %s", err) + } +}