@@ -20,6 +20,7 @@ package appList
2020import (
2121 "context"
2222 "encoding/json"
23+ "errors"
2324 "fmt"
2425 "github.com/devtron-labs/devtron/api/helm-app/gRPC"
2526 client "github.com/devtron-labs/devtron/api/helm-app/service"
@@ -645,26 +646,34 @@ func (handler AppListingRestHandlerImpl) FetchResourceTree(w http.ResponseWriter
645646
646647func (handler AppListingRestHandlerImpl ) handleResourceTreeErrAndDeletePipelineIfNeeded (w http.ResponseWriter , err error ,
647648 appId int , envId int , acdToken string , cdPipeline * pipelineConfig.Pipeline ) {
649+ var apiError * util.ApiError
650+ ok := errors .As (err , & apiError )
648651 if cdPipeline .DeploymentAppType == util .PIPELINE_DEPLOYMENT_TYPE_ACD {
649- apiError , ok := err .(* util.ApiError )
650652 if ok && apiError != nil {
651653 if apiError .Code == constants .AppDetailResourceTreeNotFound && cdPipeline .DeploymentAppDeleteRequest == true && cdPipeline .DeploymentAppCreated == true {
652654 acdAppFound , appDeleteErr := handler .pipeline .MarkGitOpsDevtronAppsDeletedWhereArgoAppIsDeleted (appId , envId , acdToken , cdPipeline )
653655 if appDeleteErr != nil {
654- common .WriteJsonResp (w , fmt .Errorf ("error in deleting devtron pipeline for deleted argocd app" ), nil , http .StatusInternalServerError )
656+ apiError .UserMessage = constants .ErrorDeletingPipelineForDeletedArgoAppMsg
657+ common .WriteJsonResp (w , apiError , nil , http .StatusInternalServerError )
655658 return
656659 } else if appDeleteErr == nil && ! acdAppFound {
657- common .WriteJsonResp (w , fmt .Errorf ("argocd app deleted" ), nil , http .StatusNotFound )
660+ apiError .UserMessage = constants .ArgoAppDeletedErrMsg
661+ common .WriteJsonResp (w , apiError , nil , http .StatusNotFound )
658662 return
659663 }
660664 }
661665 }
662666 }
663667 // not returned yet therefore no specific error to be handled, send error in internal message
664- common .WriteJsonResp (w , & util.ApiError {
665- InternalMessage : err .Error (),
666- UserMessage : "unable to fetch resource tree" ,
667- }, nil , http .StatusInternalServerError )
668+ if ok && apiError != nil {
669+ apiError .UserMessage = constants .UnableToFetchResourceTreeErrMsg
670+ } else {
671+ apiError = & util.ApiError {
672+ InternalMessage : err .Error (),
673+ UserMessage : constants .UnableToFetchResourceTreeErrMsg ,
674+ }
675+ }
676+ common .WriteJsonResp (w , apiError , nil , http .StatusInternalServerError )
668677}
669678
670679func (handler AppListingRestHandlerImpl ) FetchAppStageStatus (w http.ResponseWriter , r * http.Request ) {
@@ -1007,9 +1016,13 @@ func (handler AppListingRestHandlerImpl) fetchResourceTree(w http.ResponseWriter
10071016 handler .logger .Debugw ("FetchAppDetailsV2, time elapsed in fetching application for environment " , "elapsed" , elapsed , "appId" , appId , "envId" , envId )
10081017 if err != nil {
10091018 handler .logger .Errorw ("service err, FetchAppDetailsV2, resource tree" , "err" , err , "app" , appId , "env" , envId )
1019+ internalMsg := fmt .Sprintf ("%s, err:- %s" , constants .UnableToFetchResourceTreeForAcdErrMsg , err .Error ())
1020+ clientCode , _ := util .GetClientDetailedError (err )
1021+ httpStatusCode := clientCode .GetHttpStatusCodeForGivenGrpcCode ()
10101022 err = & util.ApiError {
1023+ HttpStatusCode : httpStatusCode ,
10111024 Code : constants .AppDetailResourceTreeNotFound ,
1012- InternalMessage : "app detail fetched, failed to get resource tree from acd" ,
1025+ InternalMessage : internalMsg ,
10131026 UserMessage : "Error fetching detail, if you have recently created this deployment pipeline please try after sometime." ,
10141027 }
10151028 return resourceTree , err
@@ -1110,6 +1123,10 @@ func (handler AppListingRestHandlerImpl) fetchResourceTree(w http.ResponseWriter
11101123 resp , err := handler .k8sCommonService .GetManifestsByBatch (r .Context (), validRequest )
11111124 if err != nil {
11121125 handler .logger .Errorw ("error in getting manifest by batch" , "err" , err , "clusterId" , clusterIdString )
1126+ httpStatus , ok := util .IsErrorContextCancelledOrDeadlineExceeded (err )
1127+ if ok {
1128+ return nil , & util.ApiError {HttpStatusCode : httpStatus , Code : strconv .Itoa (httpStatus ), InternalMessage : err .Error ()}
1129+ }
11131130 return nil , err
11141131 }
11151132 newResourceTree := handler .k8sCommonService .PortNumberExtraction (resp , resourceTree )
0 commit comments