From 80022c3ef844b00296e7c0eab86fa5238abc9747 Mon Sep 17 00:00:00 2001 From: Andrei Pohilko Date: Fri, 24 Mar 2023 17:39:29 +0000 Subject: [PATCH] Don't fail on single resource status error Relates to #301 --- pkg/dashboard/handlers/helmHandlers.go | 7 ++++--- pkg/dashboard/handlers/kubeHandlers.go | 9 ++++++--- pkg/dashboard/static/details-view.js | 4 +++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/pkg/dashboard/handlers/helmHandlers.go b/pkg/dashboard/handlers/helmHandlers.go index 1607ce9..227dfeb 100644 --- a/pkg/dashboard/handlers/helmHandlers.go +++ b/pkg/dashboard/handlers/helmHandlers.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + v1 "k8s.io/apimachinery/pkg/apis/testapigroup/v1" "net/http" "sort" "strconv" @@ -149,10 +150,10 @@ func (h *HelmHandler) Resources(c *gin.Context) { } info, err := app.K8s.GetResourceInfo(obj.Kind, ns, obj.Name) if err != nil { - _ = c.AbortWithError(http.StatusInternalServerError, err) - return + log.Warnf("Failed to get resource info for %s %s/%s: %+v", obj.Name, ns, obj.Name, err) + info = &v1.Carp{} } - obj.Status = *EnhanceStatus(info) + obj.Status = *EnhanceStatus(info, err) } } diff --git a/pkg/dashboard/handlers/kubeHandlers.go b/pkg/dashboard/handlers/kubeHandlers.go index 7bea038..43e5fb1 100644 --- a/pkg/dashboard/handlers/kubeHandlers.go +++ b/pkg/dashboard/handlers/kubeHandlers.go @@ -56,12 +56,12 @@ func (h *KubeHandler) GetResourceInfo(c *gin.Context) { return } - EnhanceStatus(res) + EnhanceStatus(res, nil) c.IndentedJSON(http.StatusOK, res) } -func EnhanceStatus(res *v12.Carp) *v12.CarpStatus { +func EnhanceStatus(res *v12.Carp, err error) *v12.CarpStatus { s := res.Status if s.Conditions == nil { s.Conditions = []v12.CarpCondition{} @@ -75,7 +75,10 @@ func EnhanceStatus(res *v12.Carp) *v12.CarpStatus { } // custom logic to provide most meaningful status for the resource - if s.Phase == "Error" { + if err != nil { + c.Reason = "ErrorGettingStatus" + c.Message = err.Error() + } else if s.Phase == "Error" { c.Status = Unhealthy } else if slices.Contains([]string{"Available", "Active", "Established", "Bound", "Ready"}, string(s.Phase)) { c.Status = Healthy diff --git a/pkg/dashboard/static/details-view.js b/pkg/dashboard/static/details-view.js index d15ab13..cca9571 100644 --- a/pkg/dashboard/static/details-view.js +++ b/pkg/dashboard/static/details-view.js @@ -188,7 +188,9 @@ function showResources(namespace, chart, revision) { const cond = res.status.conditions[k] const badge = $("").text(cond.reason); - if (cond.status === "Healthy") { + if (cond.status === "Unknown") { + badge.addClass("bg-secondary text-danger") + } else if (cond.status === "Healthy") { badge.addClass("bg-success text-dark") } else if (cond.status === "Progressing") { badge.addClass("bg-warning")