|
|
|
@ -163,16 +163,68 @@ func (s *webServer) viewStream(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func boolToFloat(b bool) float32 {
|
|
|
|
|
if b {
|
|
|
|
|
return 1.0
|
|
|
|
|
} else {
|
|
|
|
|
return 0.0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// httpMetrics serves minimalistic Prometheus-compatible metrics.
|
|
|
|
|
func (s *webServer) viewMetrics(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
// TODO(q3k): also serve Go stuff using the actual Prometheus metrics client
|
|
|
|
|
// library.
|
|
|
|
|
// TODO(q3k): serve the rest of the data model
|
|
|
|
|
state := s.d.snapshot()
|
|
|
|
|
mbar := state.piraniMbar100.mbar
|
|
|
|
|
|
|
|
|
|
// sem_pressure_mbar is meant to represent the fused pressure value
|
|
|
|
|
// from all data sources once we have more vacuum sensors in the
|
|
|
|
|
// system. sem_pirani_mbar is just the reading from the pirani gauge.
|
|
|
|
|
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, "sem_pressure_mbar %f\n", mbar)
|
|
|
|
|
fmt.Fprintf(w, "sem_pressure_mbar %f\n", state.piraniMbar100.mbar)
|
|
|
|
|
|
|
|
|
|
fmt.Fprintf(w, "# HELP sem_pirani_mbar Pressure reading by the Pirani gauge, in millibar\n")
|
|
|
|
|
fmt.Fprintf(w, "# TYPE sem_pirani_mbar gauge\n")
|
|
|
|
|
fmt.Fprintf(w, "sem_pirani_mbar %f\n", state.piraniMbar100.mbar)
|
|
|
|
|
|
|
|
|
|
fmt.Fprintf(w, "# HELP sem_pirani_volts Voltage output from the Pirani gauge, in volts\n")
|
|
|
|
|
fmt.Fprintf(w, "# TYPE sem_pirani_volts gauge\n")
|
|
|
|
|
fmt.Fprintf(w, "sem_pirani_volts %f\n", state.piraniVolts100.avg)
|
|
|
|
|
|
|
|
|
|
fmt.Fprintf(w, "# HELP sem_pirani_failsafe_active Whether pirani gauge failsafe mode is active (boolean)\n")
|
|
|
|
|
fmt.Fprintf(w, "# TYPE sem_pirani_failsafe_active gauge\n")
|
|
|
|
|
fmt.Fprintf(w, "sem_pirani_failsafe_active %f\n", boolToFloat(state.safety.failsafe))
|
|
|
|
|
|
|
|
|
|
fmt.Fprintf(w, "# HELP sem_dp_lockout_active Whether diffusion pump lockout is active (boolean)\n")
|
|
|
|
|
fmt.Fprintf(w, "# TYPE sem_dp_lockout_active gauge\n")
|
|
|
|
|
fmt.Fprintf(w, "sem_dp_lockout_active %f\n", boolToFloat(state.safety.highPressure))
|
|
|
|
|
|
|
|
|
|
fmt.Fprintf(w, "# HELP sem_pump_diffusion_running Whether the diffusion pump is running (boolean)\n")
|
|
|
|
|
fmt.Fprintf(w, "# TYPE sem_pump_diffusion_running gauge\n")
|
|
|
|
|
fmt.Fprintf(w, "sem_pump_diffusion_running %f\n", boolToFloat(state.dpOn))
|
|
|
|
|
|
|
|
|
|
fmt.Fprintf(w, "# HELP sem_pump_roughing_running Whether the roughing pump is running (boolean)\n")
|
|
|
|
|
fmt.Fprintf(w, "# TYPE sem_pump_roughing_running gauge\n")
|
|
|
|
|
fmt.Fprintf(w, "sem_pump_roughing_running %f\n", boolToFloat(state.rpOn))
|
|
|
|
|
|
|
|
|
|
rough, high := state.vacuumStatus()
|
|
|
|
|
fmt.Fprintf(w, "# HELP sem_vacuum_rough_reached Whether a rough vacuum has been reached (boolean)\n")
|
|
|
|
|
fmt.Fprintf(w, "# TYPE sem_vacuum_rough_reached gauge\n")
|
|
|
|
|
fmt.Fprintf(w, "sem_vacuum_rough_reached %f\n", boolToFloat(rough))
|
|
|
|
|
|
|
|
|
|
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) {
|
|
|
|
|