@@ -20,6 +20,7 @@ package appList
20
20
import (
21
21
"context"
22
22
"encoding/json"
23
+ "errors"
23
24
"fmt"
24
25
"github.com/devtron-labs/devtron/api/helm-app/gRPC"
25
26
client "github.com/devtron-labs/devtron/api/helm-app/service"
@@ -645,26 +646,34 @@ func (handler AppListingRestHandlerImpl) FetchResourceTree(w http.ResponseWriter
645
646
646
647
func (handler AppListingRestHandlerImpl ) handleResourceTreeErrAndDeletePipelineIfNeeded (w http.ResponseWriter , err error ,
647
648
appId int , envId int , acdToken string , cdPipeline * pipelineConfig.Pipeline ) {
649
+ var apiError * util.ApiError
650
+ ok := errors .As (err , & apiError )
648
651
if cdPipeline .DeploymentAppType == util .PIPELINE_DEPLOYMENT_TYPE_ACD {
649
- apiError , ok := err .(* util.ApiError )
650
652
if ok && apiError != nil {
651
653
if apiError .Code == constants .AppDetailResourceTreeNotFound && cdPipeline .DeploymentAppDeleteRequest == true && cdPipeline .DeploymentAppCreated == true {
652
654
acdAppFound , appDeleteErr := handler .pipeline .MarkGitOpsDevtronAppsDeletedWhereArgoAppIsDeleted (appId , envId , acdToken , cdPipeline )
653
655
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 )
655
658
return
656
659
} 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 )
658
662
return
659
663
}
660
664
}
661
665
}
662
666
}
663
667
// 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 )
668
677
}
669
678
670
679
func (handler AppListingRestHandlerImpl ) FetchAppStageStatus (w http.ResponseWriter , r * http.Request ) {
@@ -1007,9 +1016,13 @@ func (handler AppListingRestHandlerImpl) fetchResourceTree(w http.ResponseWriter
1007
1016
handler .logger .Debugw ("FetchAppDetailsV2, time elapsed in fetching application for environment " , "elapsed" , elapsed , "appId" , appId , "envId" , envId )
1008
1017
if err != nil {
1009
1018
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 ()
1010
1022
err = & util.ApiError {
1023
+ HttpStatusCode : httpStatusCode ,
1011
1024
Code : constants .AppDetailResourceTreeNotFound ,
1012
- InternalMessage : "app detail fetched, failed to get resource tree from acd" ,
1025
+ InternalMessage : internalMsg ,
1013
1026
UserMessage : "Error fetching detail, if you have recently created this deployment pipeline please try after sometime." ,
1014
1027
}
1015
1028
return resourceTree , err
@@ -1110,6 +1123,10 @@ func (handler AppListingRestHandlerImpl) fetchResourceTree(w http.ResponseWriter
1110
1123
resp , err := handler .k8sCommonService .GetManifestsByBatch (r .Context (), validRequest )
1111
1124
if err != nil {
1112
1125
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
+ }
1113
1130
return nil , err
1114
1131
}
1115
1132
newResourceTree := handler .k8sCommonService .PortNumberExtraction (resp , resourceTree )
0 commit comments