succd: Add metrics for RP and RP operating time
Add counter metrics that count the total operating time for the roughing pump and the diffusion pump.
This commit is contained in:
parent
0aba323779
commit
c031fa5a43
|
@ -217,6 +217,14 @@ func (s *webServer) viewMetrics(w http.ResponseWriter, r *http.Request) {
|
|||
fmt.Fprintf(w, "# HELP sem_vacuum_high_reached Whether a high vacuum has been reached (boolean)\n")
|
||||
fmt.Fprintf(w, "# TYPE sem_vacuum_high_reached gauge\n")
|
||||
fmt.Fprintf(w, "sem_vacuum_high_reached %f\n", boolToFloat(high))
|
||||
|
||||
fmt.Fprintf(w, "# HELP sem_rp_operating_seconds_total Operating time of the roughing pump, in seconds\n")
|
||||
fmt.Fprintf(w, "# TYPE sem_rp_operating_seconds_total counter\n")
|
||||
fmt.Fprintf(w, "sem_rp_operating_seconds_total %f\n", state.rpOperatingTime.Seconds())
|
||||
|
||||
fmt.Fprintf(w, "# HELP sem_dp_operating_seconds_total Operating time of the diffusion pump, in seconds\n")
|
||||
fmt.Fprintf(w, "# TYPE sem_dp_operating_seconds_total counter\n")
|
||||
fmt.Fprintf(w, "sem_dp_operating_seconds_total %f\n", state.dpOperatingTime.Seconds())
|
||||
}
|
||||
|
||||
func (s *webServer) viewRoughingPumpEnable(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
|
@ -51,6 +51,9 @@ type daemonState struct {
|
|||
rpOn bool
|
||||
dpOn bool
|
||||
|
||||
rpOperatingTime time.Duration
|
||||
dpOperatingTime time.Duration
|
||||
|
||||
vent momentaryOutput
|
||||
pumpdown momentaryOutput
|
||||
aboveRough thresholdOutput
|
||||
|
@ -77,11 +80,15 @@ func (d *daemon) process(ctx context.Context) {
|
|||
select {
|
||||
case <-ticker.C:
|
||||
now := time.Now()
|
||||
if elapsed := now.Sub(lastRun); !lastRun.IsZero() && elapsed > periodGrace {
|
||||
klog.Warningf("Processing loop lag: took %s, want %s", elapsed, period)
|
||||
var elapsed time.Duration = 0
|
||||
if !lastRun.IsZero() {
|
||||
elapsed = now.Sub(lastRun)
|
||||
if elapsed > periodGrace {
|
||||
klog.Warningf("Processing loop lag: took %s, want %s", elapsed, period)
|
||||
}
|
||||
}
|
||||
lastRun = now
|
||||
if err := d.processOnce(ctx); err != nil {
|
||||
if err := d.processOnce(ctx, elapsed); err != nil {
|
||||
if errors.Is(err, ctx.Err()) {
|
||||
return
|
||||
} else {
|
||||
|
@ -99,7 +106,7 @@ func (d *daemon) process(ctx context.Context) {
|
|||
}
|
||||
|
||||
// processOnce runs the main loop step of succd.
|
||||
func (d *daemon) processOnce(_ context.Context) error {
|
||||
func (d *daemon) processOnce(_ context.Context, elapsed time.Duration) error {
|
||||
v, err := d.adcPirani.Read()
|
||||
if err != nil {
|
||||
return fmt.Errorf("when reading ADC: %w", err)
|
||||
|
@ -190,5 +197,13 @@ func (d *daemon) processOnce(_ context.Context) error {
|
|||
}
|
||||
}
|
||||
|
||||
// Update operating time counters
|
||||
if d.rpOn && elapsed > 0 {
|
||||
d.rpOperatingTime += elapsed
|
||||
}
|
||||
if d.dpOn && elapsed > 0 {
|
||||
d.dpOperatingTime += elapsed
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue