79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/local-mcp/local-mcp-go/internal/config"
|
|
"github.com/local-mcp/local-mcp-go/internal/models"
|
|
)
|
|
|
|
func handleHealth() http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
writeJSON(w, http.StatusOK, map[string]any{
|
|
"status": "ok",
|
|
"server_time": time.Now().UTC().Format(time.RFC3339Nano),
|
|
})
|
|
}
|
|
}
|
|
|
|
func handleStatus(stores Stores) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
counts, err := stores.Instructions.Counts()
|
|
if err != nil {
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
|
|
cfg, err := stores.Settings.Get()
|
|
if err != nil {
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
|
|
latest, err := stores.Agents.Latest()
|
|
if err != nil {
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
|
|
agent := map[string]any{
|
|
"connected": false,
|
|
"last_seen_at": nil,
|
|
"last_fetch_at": nil,
|
|
"agent_id": nil,
|
|
}
|
|
|
|
if latest != nil {
|
|
connected := time.Since(latest.LastSeenAt).Seconds() <= float64(cfg.AgentStaleAfterSeconds)
|
|
agent = map[string]any{
|
|
"connected": connected,
|
|
"last_seen_at": latest.LastSeenAt.Format(time.RFC3339Nano),
|
|
"last_fetch_at": latest.LastFetchAt.Format(time.RFC3339Nano),
|
|
"agent_id": latest.AgentID,
|
|
}
|
|
}
|
|
|
|
resp := map[string]any{
|
|
"server": map[string]any{
|
|
"status": "up",
|
|
"started_at": serverStartTime.Format(time.RFC3339Nano),
|
|
"type": "go",
|
|
"version": config.AppVersion,
|
|
},
|
|
"agent": agent,
|
|
"queue": map[string]any{
|
|
"pending_count": counts.PendingCount,
|
|
"consumed_count": counts.ConsumedCount,
|
|
},
|
|
"settings": models.Settings{
|
|
DefaultWaitSeconds: cfg.DefaultWaitSeconds,
|
|
DefaultEmptyResponse: cfg.DefaultEmptyResponse,
|
|
AgentStaleAfterSeconds: cfg.AgentStaleAfterSeconds,
|
|
},
|
|
}
|
|
|
|
writeJSON(w, http.StatusOK, resp)
|
|
}
|
|
}
|