package main import ( "context" "encoding/json" "net/http" "git.cin.su/m/Assistant/adapters/postgres" ) type workGraphStatusReader interface { RuntimeStatus(context.Context) (postgres.WorkGraphRuntimeStatus, error) } type workGraphStatusResponse struct { Runtime string `json:"runtime"` Status string `json:"status"` GraphsByState map[string]int64 `json:"graphs_by_state"` NodesByState map[string]int64 `json:"nodes_by_state"` QueueByState map[string]int64 `json:"queue_by_state"` ObservedAtUnixMillis int64 `json:"observed_at_unix_millis"` } func workGraphStatusHandler(reader workGraphStatusReader) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet || r.URL.Path != "/v1/work-graphs/status" { http.NotFound(w, r) return } status, err := reader.RuntimeStatus(r.Context()) if err != nil { http.Error(w, "work graph status unavailable", http.StatusServiceUnavailable) return } w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(workGraphStatusResponse{ Runtime: "work-graph-runtime", Status: "ready", GraphsByState: status.GraphsByState, NodesByState: status.NodesByState, QueueByState: status.QueueByState, ObservedAtUnixMillis: status.ObservedAtUnixMillis, }) }) }