48 lines
1.6 KiB
Go
48 lines
1.6 KiB
Go
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,
|
|
})
|
|
})
|
|
}
|