From c3bf28297b7fcebe2b03f04af148dba1124e3901 Mon Sep 17 00:00:00 2001 From: Jan Svabenik Date: Sun, 22 Mar 2026 09:04:33 +0100 Subject: [PATCH] Expose surveillance spectra bins in refinement API --- cmd/sdrd/http_handlers.go | 42 +++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/cmd/sdrd/http_handlers.go b/cmd/sdrd/http_handlers.go index b20650b..8eeca71 100644 --- a/cmd/sdrd/http_handlers.go +++ b/cmd/sdrd/http_handlers.go @@ -165,24 +165,32 @@ func registerAPIHandlers(mux *http.ServeMux, cfgPath string, cfgManager *runtime snap := phaseSnap.Snapshot() windowStats := buildWindowStats(snap.refinement.Input.Windows) arbitration := buildArbitrationSnapshot(snap.refinement, snap.arbitration) + spectraBins := map[string]int{} + for _, spec := range snap.surveillance.Spectra { + if len(spec.Spectrum) == 0 { + continue + } + spectraBins[spec.Level.Name] = len(spec.Spectrum) + } out := map[string]any{ - "plan": snap.refinement.Input.Plan, - "windows": snap.refinement.Input.Windows, - "window_stats": windowStats, - "request": snap.refinement.Input.Request, - "context": snap.refinement.Input.Context, - "detail_level": snap.refinement.Input.Detail, - "arbitration": arbitration, - "work_items": snap.refinement.Input.WorkItems, - "candidates": len(snap.refinement.Input.Candidates), - "scheduled": len(snap.refinement.Input.Scheduled), - "signals": len(snap.refinement.Result.Signals), - "decisions": len(snap.refinement.Result.Decisions), - "surveillance_level": snap.surveillance.Level, - "surveillance_levels": snap.surveillance.Levels, - "display_level": snap.surveillance.DisplayLevel, - "refinement_level": snap.refinement.Input.Level, - "presentation_level": snap.presentation, + "plan": snap.refinement.Input.Plan, + "windows": snap.refinement.Input.Windows, + "window_stats": windowStats, + "request": snap.refinement.Input.Request, + "context": snap.refinement.Input.Context, + "detail_level": snap.refinement.Input.Detail, + "arbitration": arbitration, + "work_items": snap.refinement.Input.WorkItems, + "candidates": len(snap.refinement.Input.Candidates), + "scheduled": len(snap.refinement.Input.Scheduled), + "signals": len(snap.refinement.Result.Signals), + "decisions": len(snap.refinement.Result.Decisions), + "surveillance_level": snap.surveillance.Level, + "surveillance_levels": snap.surveillance.Levels, + "surveillance_spectra_bins": spectraBins, + "display_level": snap.surveillance.DisplayLevel, + "refinement_level": snap.refinement.Input.Level, + "presentation_level": snap.presentation, } _ = json.NewEncoder(w).Encode(out) })