Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions pkg/appStatus/AppStatusService.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ import (
)

const (
HealthStatusSuspended string = "Suspended"
HealthStatusHibernating string = "HIBERNATING"
HealthStatusSuspended string = "Suspended"
HealthStatusHibernatingFilter string = "HIBERNATING"
HealthStatusHibernating string = "Hibernated"
HealthStatusPartiallyHibernated string = "Partially Hibernated"
)

type AppStatusRequestResponseDto struct {
Expand Down Expand Up @@ -53,8 +55,8 @@ func (impl *AppStatusServiceImpl) UpdateStatusWithAppIdEnvId(appId, envId int, s
return err
}

if status == HealthStatusSuspended {
status = HealthStatusHibernating
if status == HealthStatusSuspended || status == HealthStatusHibernating {
status = HealthStatusHibernatingFilter
}
if container.AppId == 0 {
container.AppId = appId
Expand Down
39 changes: 30 additions & 9 deletions pkg/appStore/deployment/service/InstalledAppService.go
Original file line number Diff line number Diff line change
Expand Up @@ -1198,14 +1198,17 @@ func (impl InstalledAppServiceImpl) FetchResourceTreeWithHibernateForACD(rctx co
if appDetail.ResourceTree["nodes"] == nil {
return *appDetail
}
appDetail.ResourceTree = checkHibernate(impl, appDetail, ctx)
appDetail.ResourceTree, _ = impl.checkHibernate(appDetail.ResourceTree, deploymentAppName, ctx)
return *appDetail
}
func checkHibernate(impl InstalledAppServiceImpl, resp *bean2.AppDetailContainer, ctx context.Context) map[string]interface{} {

responseTree := resp.ResourceTree
deploymentAppName := resp.AppName + "-" + resp.EnvironmentName
func (impl InstalledAppServiceImpl) checkHibernate(resp map[string]interface{}, deploymentAppName string, ctx context.Context) (map[string]interface{}, string) {

if resp == nil {
return resp, ""
}
responseTree := resp
canBeHibernated := 0
hibernated := 0
for _, node := range responseTree["nodes"].(interface{}).([]interface{}) {
currNode := node.(interface{}).(map[string]interface{})
resName := util3.InterfaceToString(currNode["name"])
Expand Down Expand Up @@ -1234,23 +1237,33 @@ func checkHibernate(impl InstalledAppServiceImpl, resp *bean2.AppDetailContainer
replicas := util3.InterfaceToMapAdapter(manifest["spec"])["replicas"]
if replicas != nil {
currNode["canBeHibernated"] = true
canBeHibernated++
}
annotations := util3.InterfaceToMapAdapter(manifest["metadata"])["annotations"]
if annotations != nil {
val := util3.InterfaceToMapAdapter(annotations)["hibernator.devtron.ai/replicas"]
if val != nil {
if util3.InterfaceToString(val) != "0" && util3.InterfaceToFloat(replicas) == 0 {
currNode["isHibernated"] = true
hibernated++
}
}
}

}

}
node = currNode
}
return responseTree
status := ""
if hibernated > 0 && canBeHibernated > 0 {
if hibernated == canBeHibernated {
status = appStatus.HealthStatusHibernating
} else if hibernated < canBeHibernated {
status = appStatus.HealthStatusPartiallyHibernated
}
}

return responseTree, status
}

func (impl InstalledAppServiceImpl) fetchResourceTreeForACD(rctx context.Context, cn http.CloseNotifier, appId int, envId, clusterId int, deploymentAppName, namespace string) (map[string]interface{}, error) {
Expand Down Expand Up @@ -1298,10 +1311,18 @@ func (impl InstalledAppServiceImpl) fetchResourceTreeForACD(rctx context.Context
for _, metaData := range resp.PodMetadata {
metaData.EphemeralContainers = ephemeralContainersMap[metaData.Name]
}
// TODO: using this resp.Status to update in app_status table
resourceTree = util3.InterfaceToMapAdapter(resp)
resourceTree, hibernationStatus := impl.checkHibernate(resourceTree, deploymentAppName, ctx)
appStatus := resp.Status
if resourceTree != nil {
if hibernationStatus != "" {
resourceTree["status"] = hibernationStatus
appStatus = hibernationStatus
}
}
// using this resp.Status to update in app_status table
go func() {
err = impl.appStatusService.UpdateStatusWithAppIdEnvId(appId, envId, resp.Status)
err = impl.appStatusService.UpdateStatusWithAppIdEnvId(appId, envId, appStatus)
if err != nil {
impl.logger.Warnw("error in updating app status", "err", err, appId, "envId", envId)
}
Expand Down
2 changes: 1 addition & 1 deletion util/argo/ArgoUserService.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ func (impl *ArgoUserServiceImpl) GetLatestDevtronArgoCdUserToken() (string, erro
//here acd token only required in context for argo cd calls
return "", nil
}
k8sClient, err := impl.k8sUtil.GetCoreV1ClientInCluster()
k8sClient, err := impl.k8sUtil.GetClientForInCluster()
if err != nil {
impl.logger.Errorw("error in getting k8s client for default cluster", "err", err)
return "", err
Expand Down