diff --git a/api/helm-app/service/HelmAppService.go b/api/helm-app/service/HelmAppService.go index 35c7785d24..198078b32b 100644 --- a/api/helm-app/service/HelmAppService.go +++ b/api/helm-app/service/HelmAppService.go @@ -27,6 +27,7 @@ import ( "github.com/devtron-labs/devtron/api/helm-app/models" helmBean "github.com/devtron-labs/devtron/api/helm-app/service/bean" "github.com/devtron-labs/devtron/api/helm-app/service/read" + "github.com/devtron-labs/devtron/api/restHandler/common" "github.com/devtron-labs/devtron/internal/constants" repository2 "github.com/devtron-labs/devtron/internal/sql/repository/dockerRegistry" bean2 "github.com/devtron-labs/devtron/pkg/cluster/bean" @@ -158,35 +159,45 @@ func GetHelmReleaseConfig() (*HelmReleaseConfig, error) { func (impl *HelmAppServiceImpl) ListHelmApplications(ctx context.Context, clusterIds []int, w http.ResponseWriter, token string, helmAuth func(token string, object string) bool) { var helmCdPipelines []*pipelineConfig.Pipeline var installedHelmApps []*repository.InstalledApps + if len(clusterIds) == 0 { + common.WriteJsonResp(w, util.DefaultApiError().WithHttpStatusCode(http.StatusBadRequest).WithInternalMessage("Invalid payload. Provide cluster ids in request").WithUserMessage("Invalid payload. Provide cluster ids in request"), + nil, + http.StatusBadRequest) + return + } start := time.Now() appStream, err := impl.listApplications(ctx, clusterIds) middleware.AppListingDuration.WithLabelValues("listApplications", "helm").Observe(time.Since(start).Seconds()) if err != nil { impl.logger.Errorw("error in fetching app list", "clusters", clusterIds, "err", err) + common.WriteJsonResp(w, util.DefaultApiError().WithHttpStatusCode(http.StatusInternalServerError).WithInternalMessage("error in fetching app list").WithUserMessage("error in fetching app list"), + nil, + http.StatusInternalServerError) + return + } + + // get helm apps which are created using cd_pipelines + newCtx, span := otel.Tracer("pipelineRepository").Start(ctx, "GetAppAndEnvDetailsForDeploymentAppTypePipeline") + start = time.Now() + helmCdPipelines, err = impl.pipelineRepository.GetAppAndEnvDetailsForDeploymentAppTypePipeline(util.PIPELINE_DEPLOYMENT_TYPE_HELM, clusterIds) + middleware.AppListingDuration.WithLabelValues("getAppAndEnvDetailsForDeploymentAppTypePipeline", "helm").Observe(time.Since(start).Seconds()) + span.End() + if err != nil { + impl.logger.Errorw("error in fetching helm app list from DB created using cd_pipelines", "clusters", clusterIds, "err", err) } - if err == nil && len(clusterIds) > 0 { - // get helm apps which are created using cd_pipelines - newCtx, span := otel.Tracer("pipelineRepository").Start(ctx, "GetAppAndEnvDetailsForDeploymentAppTypePipeline") + + // if not hyperion mode, then fetch from installed_apps whose deploymentAppType is helm (as in hyperion mode, these apps should be treated as external-apps) + if !util2.IsBaseStack() { + newCtx, span = otel.Tracer("pipelineRepository").Start(newCtx, "GetAppAndEnvDetailsForDeploymentAppTypePipeline") start = time.Now() - helmCdPipelines, err = impl.pipelineRepository.GetAppAndEnvDetailsForDeploymentAppTypePipeline(util.PIPELINE_DEPLOYMENT_TYPE_HELM, clusterIds) - middleware.AppListingDuration.WithLabelValues("getAppAndEnvDetailsForDeploymentAppTypePipeline", "helm").Observe(time.Since(start).Seconds()) + installedHelmApps, err = impl.installedAppRepository.GetAppAndEnvDetailsForDeploymentAppTypeInstalledApps(util.PIPELINE_DEPLOYMENT_TYPE_HELM, clusterIds) + middleware.AppListingDuration.WithLabelValues("getAppAndEnvDetailsForDeploymentAppTypeInstalledApps", "helm").Observe(time.Since(start).Seconds()) span.End() if err != nil { - impl.logger.Errorw("error in fetching helm app list from DB created using cd_pipelines", "clusters", clusterIds, "err", err) - } - - // if not hyperion mode, then fetch from installed_apps whose deploymentAppType is helm (as in hyperion mode, these apps should be treated as external-apps) - if !util2.IsBaseStack() { - newCtx, span = otel.Tracer("pipelineRepository").Start(newCtx, "GetAppAndEnvDetailsForDeploymentAppTypePipeline") - start = time.Now() - installedHelmApps, err = impl.installedAppRepository.GetAppAndEnvDetailsForDeploymentAppTypeInstalledApps(util.PIPELINE_DEPLOYMENT_TYPE_HELM, clusterIds) - middleware.AppListingDuration.WithLabelValues("getAppAndEnvDetailsForDeploymentAppTypeInstalledApps", "helm").Observe(time.Since(start).Seconds()) - span.End() - if err != nil { - impl.logger.Errorw("error in fetching helm app list from DB created from app store", "clusters", clusterIds, "err", err) - } + impl.logger.Errorw("error in fetching helm app list from DB created from app store", "clusters", clusterIds, "err", err) } } + impl.pump.StartStreamWithTransformer(w, func() (proto.Message, error) { return appStream.Recv() }, err,