package main import ( "context" "encoding/json" "net/http" "git.cin.su/m/Assistant/adapters/postgres" ) type truthRuntimeStatusReader interface { TruthRuntimeStatus(context.Context) (postgres.TruthRuntimeStatus, error) } type truthRuntimeStatusResponse struct { Runtime string `json:"runtime"` Status string `json:"status"` BundleCount int64 `json:"bundle_count"` ClaimsByVerification map[string]int64 `json:"claims_by_verification"` BeliefsByState map[string]int64 `json:"beliefs_by_state"` SourcesByFreshness map[string]int64 `json:"sources_by_freshness"` ObservedAtUnixMillis int64 `json:"observed_at_unix_millis"` } func truthRuntimeStatusHandler(reader truthRuntimeStatusReader) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet || r.URL.Path != "/v1/research/status" { http.NotFound(w, r) return } status, err := reader.TruthRuntimeStatus(r.Context()) if err != nil { http.Error(w, "research status unavailable", http.StatusServiceUnavailable) return } w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(truthRuntimeStatusResponse{ Runtime: "research-runtime", Status: "ready", BundleCount: status.BundleCount, ClaimsByVerification: status.ClaimsByVerification, BeliefsByState: status.BeliefsByState, SourcesByFreshness: status.SourcesByFreshness, ObservedAtUnixMillis: status.ObservedAtUnixMillis, }) }) }