package api import ( "errors" "log/slog" "net/http" "github.com/go-chi/chi/v5" "github.com/alexei/tinyforge/internal/store" ) // getInstanceStats handles GET /api/projects/{id}/stages/{stage}/instances/{iid}/stats. // Returns CPU and memory stats for the container backing the given instance. func (s *Server) getInstanceStats(w http.ResponseWriter, r *http.Request) { instanceID := chi.URLParam(r, "iid") inst, err := s.store.GetInstanceByID(instanceID) if err != nil { if errors.Is(err, store.ErrNotFound) { respondNotFound(w, "instance") return } slog.Error("failed to get instance", "instance_id", instanceID, "error", err) respondError(w, http.StatusInternalServerError, "failed to get instance") return } if inst.ContainerID == "" { respondError(w, http.StatusBadRequest, "instance has no container") return } stats, err := s.docker.GetContainerStats(r.Context(), inst.ContainerID) if err != nil { slog.Error("failed to get container stats", "container_id", inst.ContainerID, "error", err) respondError(w, http.StatusInternalServerError, "failed to get container stats") return } respondJSON(w, http.StatusOK, stats) }