diff --git a/frontend/src/API/interfaces.ts b/frontend/src/API/interfaces.ts index 8f2f3a2..3497407 100644 --- a/frontend/src/API/interfaces.ts +++ b/frontend/src/API/interfaces.ts @@ -43,6 +43,8 @@ export interface ApplicationStatus { ClusterMode: boolean; CurVer: string; LatestVer: string; + NoHealth: boolean; + NoLatest: boolean; } export interface KubectlContexts { diff --git a/frontend/src/components/InstalledPackages/InstalledPackageCard.tsx b/frontend/src/components/InstalledPackages/InstalledPackageCard.tsx index 9f5a2d0..a6c2cf8 100644 --- a/frontend/src/components/InstalledPackages/InstalledPackageCard.tsx +++ b/frontend/src/components/InstalledPackages/InstalledPackageCard.tsx @@ -16,6 +16,7 @@ import { isNewerVersion } from "../../utils"; import type { LatestChartVersion } from "../../API/interfaces"; import useNavigateWithSearchParams from "../../hooks/useNavigateWithSearchParams"; import { useInView } from "react-intersection-observer"; +import { useGetApplicationStatus } from "../../API/other"; type InstalledPackageCardProps = { release: Release; @@ -31,14 +32,17 @@ export default function InstalledPackageCard({ threshold: 0.3, triggerOnce: true, }); + const { data: status } = useGetApplicationStatus(); + const { data: latestVersionResult } = useGetLatestVersion(release.chartName, { queryKey: ["chartName", release.chartName], + enabled: !status?.NoLatest, }); const { data: statusData = [], isLoading } = useQuery({ queryKey: ["resourceStatus", release], queryFn: () => apiService.getResourceStatus({ release }), - enabled: inView, + enabled: inView && !status?.NoHealth, }); const latestVersionData: LatestChartVersion | undefined = diff --git a/frontend/src/data/types.ts b/frontend/src/data/types.ts index 3e7b8a6..b49861e 100644 --- a/frontend/src/data/types.ts +++ b/frontend/src/data/types.ts @@ -104,6 +104,8 @@ export type Status = { Analytics: boolean; CacheHitRatio: number; ClusterMode: boolean; + NoHealth: boolean; + NoLatest: boolean; }; export type ChartVersion = { diff --git a/main.go b/main.go index 4eac5dc..25af713 100644 --- a/main.go +++ b/main.go @@ -34,6 +34,8 @@ type options struct { Namespace string `short:"n" long:"namespace" description:"Namespace for HELM operations"` Devel bool `long:"devel" description:"Include development versions of charts"` LocalChart []string `long:"local-chart" description:"Specify location of local chart to include into UI"` + NoHealth bool `long:"no-health" description:"Disable health checks for installed charts"` + NoLatest bool `long:"no-latest" description:"Disable latest version checks for installed charts"` } func main() { @@ -62,6 +64,8 @@ func main() { NoTracking: opts.NoTracking, Devel: opts.Devel, LocalCharts: opts.LocalChart, + NoHealth: opts.NoHealth, + NoLatest: opts.NoLatest, } ctx, cancel := context.WithCancel(context.Background()) diff --git a/pkg/dashboard/handlers/helmHandlers.go b/pkg/dashboard/handlers/helmHandlers.go index fce14b5..e3a328d 100644 --- a/pkg/dashboard/handlers/helmHandlers.go +++ b/pkg/dashboard/handlers/helmHandlers.go @@ -148,7 +148,7 @@ func (h *HelmHandler) Resources(c *gin.Context) { //return } - if c.Query("health") != "" { // we need to query k8s for health status + if c.Query("health") != "" && !h.Data.StatusInfo.NoHealth { // we need to query k8s for health status app := h.GetApp(c) if app == nil { _ = c.AbortWithError(http.StatusInternalServerError, err) @@ -216,6 +216,11 @@ func (h *HelmHandler) RepoLatestVer(c *gin.Context) { return // sets error inside } + if h.Data.StatusInfo.NoLatest { + c.Status(http.StatusNoContent) + return + } + rep, err := app.Repositories.Containing(qp.Name) if err != nil { _ = c.AbortWithError(http.StatusInternalServerError, err) diff --git a/pkg/dashboard/objects/data.go b/pkg/dashboard/objects/data.go index b87d73b..3bfa726 100644 --- a/pkg/dashboard/objects/data.go +++ b/pkg/dashboard/objects/data.go @@ -41,6 +41,8 @@ type StatusInfo struct { Analytics bool CacheHitRatio float64 ClusterMode bool + NoHealth bool + NoLatest bool } func NewDataLayer(ns []string, ver string, cg HelmConfigGetter, devel bool) (*DataLayer, error) { diff --git a/pkg/dashboard/server.go b/pkg/dashboard/server.go index 068bdd1..7fd0e65 100644 --- a/pkg/dashboard/server.go +++ b/pkg/dashboard/server.go @@ -29,6 +29,8 @@ type Server struct { NoTracking bool Devel bool LocalCharts []string + NoHealth bool + NoLatest bool } func (s *Server) StartServer(ctx context.Context, cancel context.CancelFunc) (string, utils.ControlChan, error) { @@ -40,6 +42,9 @@ func (s *Server) StartServer(ctx context.Context, cancel context.CancelFunc) (st data.LocalCharts = s.LocalCharts data.StatusInfo.Analytics = (!s.NoTracking && s.Version != "0.0.0") || utils.EnvAsBool("HD_DEV_ANALYTICS", false) + data.StatusInfo.NoHealth = s.NoHealth || utils.EnvAsBool("HD_NO_HEALTH", false) + data.StatusInfo.NoLatest = s.NoLatest || utils.EnvAsBool("HD_NO_LATEST", false) + err = s.detectClusterMode(data) if err != nil { return "", nil, errorx.Decorate(err, "Failed to detect cluster mode")