Skip to content

Commit aada3d9

Browse files
authored
feat(metrics): adding prometheus metrics for dc power extension (#556)
1 parent d704fcc commit aada3d9

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

dc_metrics.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package kvm
2+
3+
import (
4+
"sync"
5+
6+
"github.com/prometheus/client_golang/prometheus"
7+
)
8+
9+
var (
10+
dcCurrentGauge = prometheus.NewGauge(prometheus.GaugeOpts{
11+
Name: "jetkvm_dc_current_amperes",
12+
Help: "Current DC power consumption in amperes",
13+
})
14+
15+
dcPowerGauge = prometheus.NewGauge(prometheus.GaugeOpts{
16+
Name: "jetkvm_dc_power_watts",
17+
Help: "DC power consumption in watts",
18+
})
19+
20+
dcVoltageGauge = prometheus.NewGauge(prometheus.GaugeOpts{
21+
Name: "jetkvm_dc_voltage_volts",
22+
Help: "DC voltage in volts",
23+
})
24+
25+
dcStateGauge = prometheus.NewGauge(prometheus.GaugeOpts{
26+
Name: "jetkvm_dc_power_state",
27+
Help: "DC power state (1 = on, 0 = off)",
28+
})
29+
30+
dcMetricsRegistered sync.Once
31+
)
32+
33+
// registerDCMetrics registers the DC power metrics with Prometheus (called once when DC control is mounted)
34+
func registerDCMetrics() {
35+
dcMetricsRegistered.Do(func() {
36+
prometheus.MustRegister(dcCurrentGauge)
37+
prometheus.MustRegister(dcPowerGauge)
38+
prometheus.MustRegister(dcVoltageGauge)
39+
prometheus.MustRegister(dcStateGauge)
40+
})
41+
}
42+
43+
// updateDCMetrics updates the Prometheus metrics with current DC power state values
44+
func updateDCMetrics(state DCPowerState) {
45+
dcCurrentGauge.Set(state.Current)
46+
dcPowerGauge.Set(state.Power)
47+
dcVoltageGauge.Set(state.Voltage)
48+
if state.IsOn {
49+
dcStateGauge.Set(1)
50+
} else {
51+
dcStateGauge.Set(0)
52+
}
53+
}

serial.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ func pressATXResetButton(duration time.Duration) error {
128128

129129
func mountDCControl() error {
130130
_ = port.SetMode(defaultMode)
131+
registerDCMetrics()
131132
go runDCControl()
132133
return nil
133134
}
@@ -206,6 +207,9 @@ func runDCControl() {
206207
dcState.Current = amps
207208
dcState.Power = watts
208209

210+
// Update Prometheus metrics
211+
updateDCMetrics(dcState)
212+
209213
if currentSession != nil {
210214
writeJSONRPCEvent("dcState", dcState, currentSession)
211215
}

0 commit comments

Comments
 (0)