Compare commits

...

1 commit

Author SHA1 Message Date
hmelder a943586b7e Add more metrics
All checks were successful
/ test (push) Successful in 12s
/ test (pull_request) Successful in 10s
2024-10-26 19:42:35 +02:00
3 changed files with 62 additions and 0 deletions

View file

@ -13,6 +13,7 @@ type gpio interface {
// set returns the GPIO value. The meaning of the logic level is // set returns the GPIO value. The meaning of the logic level is
// implementation-dependent. // implementation-dependent.
set(state bool) error set(state bool) error
get() bool
} }
// bbGPIO implements gpio using BeagleBone's built-in GPIO pins. // bbGPIO implements gpio using BeagleBone's built-in GPIO pins.
@ -72,6 +73,12 @@ func (b *bbGPIO) set(state bool) error {
return nil return nil
} }
func (b *bbGPIO) get() bool {
b.mu.Lock()
defer b.mu.Unlock()
return b.state
}
// fakeGPIO implements a GPIO that logs state changes. // fakeGPIO implements a GPIO that logs state changes.
type fakeGPIO struct { type fakeGPIO struct {
desc string desc string
@ -90,3 +97,9 @@ func (b *fakeGPIO) set(state bool) error {
b.state = state b.state = state
return nil return nil
} }
func (b *fakeGPIO) get() bool {
b.mu.Lock()
defer b.mu.Unlock()
return b.state
}

View file

@ -170,9 +170,28 @@ func (s *webServer) viewMetrics(w http.ResponseWriter, r *http.Request) {
// TODO(q3k): serve the rest of the data model // TODO(q3k): serve the rest of the data model
state := s.d.snapshot() state := s.d.snapshot()
mbar := state.piraniMbar100.mbar mbar := state.piraniMbar100.mbar
rpOn := state.rpOn
dpOn := state.dpOn
pumpDownStatus := s.d.gpioPumpDownStatus()
ventStatus := s.d.gpioVentStatus()
belowRoughStatus := s.d.gpioBelowRoughStatus()
belowHighStatus := s.d.gpioBelowHighStatus()
fmt.Fprintf(w, "# HELP sem_pressure_mbar Pressure in the SEM chamber, in millibar\n") fmt.Fprintf(w, "# HELP sem_pressure_mbar Pressure in the SEM chamber, in millibar\n")
fmt.Fprintf(w, "# TYPE sem_pressure_mbar gauge\n") fmt.Fprintf(w, "# TYPE sem_pressure_mbar gauge\n")
fmt.Fprintf(w, "sem_pressure_mbar %f\n", mbar) fmt.Fprintf(w, "sem_pressure_mbar %f\n", mbar)
fmt.Fprintf(w, "# TYPE sem_rp_on gauge\n")
fmt.Fprintf(w, "sem_rp_on %t\n", rpOn)
fmt.Fprintf(w, "# TYPE sem_dp_on gauge\n")
fmt.Fprintf(w, "sem_dp_on %t\n", dpOn)
fmt.Fprintf(w, "# TYPE sem_gpio_pump_down_status gauge\n")
fmt.Fprintf(w, "sem_gpio_pump_down_status %t\n", pumpDownStatus)
fmt.Fprintf(w, "# TYPE sem_gpio_vent_status gauge\n")
fmt.Fprintf(w, "sem_gpio_vent_status %t\n", ventStatus)
fmt.Fprintf(w, "# TYPE sem_gpio_below_rough_status gauge\n")
fmt.Fprintf(w, "sem_gpio_below_rough_status %t\n", belowRoughStatus)
fmt.Fprintf(w, "# TYPE sem_gpio_below_high_status gauge\n")
fmt.Fprintf(w, "sem_gpio_below_high_status %t\n", belowHighStatus)
} }
func (s *webServer) viewRoughingPumpEnable(w http.ResponseWriter, r *http.Request) { func (s *webServer) viewRoughingPumpEnable(w http.ResponseWriter, r *http.Request) {

View file

@ -18,6 +18,12 @@ type daemonController interface {
pumpDownPress() pumpDownPress()
// ventPRess simulates a vent button press. // ventPRess simulates a vent button press.
ventPress() ventPress()
// returns the current gpio state of the pump down button
gpioPumpDownStatus() bool
// returns the current gpio state of the vent button
gpioVentStatus() bool
gpioBelowRoughStatus() bool
gpioBelowHighStatus() bool
} }
func (d *daemon) loopLoad() int64 { func (d *daemon) loopLoad() int64 {
@ -62,3 +68,27 @@ func (d *daemon) ventPress() {
defer d.mu.Unlock() defer d.mu.Unlock()
d.vent.trigger() d.vent.trigger()
} }
func (d *daemon) gpioPumpDownStatus() bool {
d.mu.Lock()
defer d.mu.Unlock()
return d.gpioBtnPumpDown.get()
}
func (d *daemon) gpioVentStatus() bool {
d.mu.Lock()
defer d.mu.Unlock()
return d.gpioBtnVent.get()
}
func (d *daemon) gpioBelowRoughStatus() bool {
d.mu.Lock()
defer d.mu.Unlock()
return d.gpioBelowRough.get()
}
func (d *daemon) gpioBelowHighStatus() bool {
d.mu.Lock()
defer d.mu.Unlock()
return d.gpioBelowHigh.get()
}