@@ -3246,6 +3246,72 @@ func (impl *AppServiceImpl) UpdateCdWorkflowRunnerByACDObject(app *v1alpha1.Appl
32463246 return nil
32473247}
32483248
3249+ const kedaAutoscaling = "kedaAutoscaling"
3250+ const HorizontalPodAutoscaler = "HorizontalPodAutoscaler"
3251+ const fullnameOverride = "fullnameOverride"
3252+ const nameOverride = "nameOverride"
3253+ const enabled = "enabled"
3254+ const replicaCount = "replicaCount"
3255+
3256+ func (impl * AppServiceImpl ) getAutoScalingReplicaCount (templateMap map [string ]interface {}, appName string ) * util2.HpaResourceRequest {
3257+ hasOverride := false
3258+ if _ , ok := templateMap [fullnameOverride ]; ok {
3259+ appNameOverride := templateMap [fullnameOverride ].(string )
3260+ if len (appNameOverride ) > 0 {
3261+ appName = appNameOverride
3262+ hasOverride = true
3263+ }
3264+ }
3265+ if ! hasOverride {
3266+ if _ , ok := templateMap [nameOverride ]; ok {
3267+ nameOverride := templateMap [nameOverride ].(string )
3268+ if len (nameOverride ) > 0 {
3269+ appName = fmt .Sprintf ("%s-%s" , appName , nameOverride )
3270+ }
3271+ }
3272+ }
3273+ hpaResourceRequest := & util2.HpaResourceRequest {}
3274+ hpaResourceRequest .Version = ""
3275+ hpaResourceRequest .Group = autoscaling .ServiceName
3276+ hpaResourceRequest .Kind = HorizontalPodAutoscaler
3277+ impl .logger .Infow ("getAutoScalingReplicaCount" , "hpaResourceRequest" , hpaResourceRequest )
3278+ if _ , ok := templateMap [kedaAutoscaling ]; ok {
3279+ as := templateMap [kedaAutoscaling ]
3280+ asd := as .(map [string ]interface {})
3281+ if _ , ok := asd [enabled ]; ok {
3282+ impl .logger .Infow ("getAutoScalingReplicaCount" , "hpaResourceRequest" , hpaResourceRequest )
3283+ enable := asd [enabled ].(bool )
3284+ if enable {
3285+ hpaResourceRequest .IsEnable = enable
3286+ hpaResourceRequest .ReqReplicaCount = templateMap [replicaCount ].(float64 )
3287+ hpaResourceRequest .ReqMaxReplicas = asd ["maxReplicaCount" ].(float64 )
3288+ hpaResourceRequest .ReqMinReplicas = asd ["minReplicaCount" ].(float64 )
3289+ hpaResourceRequest .ResourceName = fmt .Sprintf ("%s-%s-%s" , "keda-hpa" , appName , "keda" )
3290+ impl .logger .Infow ("getAutoScalingReplicaCount" , "hpaResourceRequest" , hpaResourceRequest )
3291+ return hpaResourceRequest
3292+ }
3293+ }
3294+ }
3295+
3296+ if _ , ok := templateMap [autoscaling .ServiceName ]; ok {
3297+ as := templateMap [autoscaling .ServiceName ]
3298+ asd := as .(map [string ]interface {})
3299+ if _ , ok := asd [enabled ]; ok {
3300+ enable := asd [enabled ].(bool )
3301+ if enable {
3302+ hpaResourceRequest .IsEnable = asd [enabled ].(bool )
3303+ hpaResourceRequest .ReqReplicaCount = templateMap [replicaCount ].(float64 )
3304+ hpaResourceRequest .ReqMaxReplicas = asd ["MaxReplicas" ].(float64 )
3305+ hpaResourceRequest .ReqMinReplicas = asd ["MinReplicas" ].(float64 )
3306+ hpaResourceRequest .ResourceName = fmt .Sprintf ("%s-%s" , appName , "hpa" )
3307+ return hpaResourceRequest
3308+ }
3309+ }
3310+ }
3311+ return hpaResourceRequest
3312+
3313+ }
3314+
32493315func (impl * AppServiceImpl ) autoscalingCheckBeforeTrigger (ctx context.Context , appName string , namespace string , merged []byte , overrideRequest * bean.ValuesOverrideRequest ) []byte {
32503316 //pipeline := overrideRequest.Pipeline
32513317 var appId = overrideRequest .AppId
@@ -3258,77 +3324,66 @@ func (impl *AppServiceImpl) autoscalingCheckBeforeTrigger(ctx context.Context, a
32583324 if err != nil {
32593325 return merged
32603326 }
3261- if _ , ok := templateMap [autoscaling .ServiceName ]; ok {
3262- as := templateMap [autoscaling .ServiceName ]
3263- asd := as .(map [string ]interface {})
3264- isEnable := false
3265- if _ , ok := asd ["enabled" ]; ok {
3266- isEnable = asd ["enabled" ].(bool )
3267- }
3268- if isEnable {
3269- reqReplicaCount := templateMap ["replicaCount" ].(float64 )
3270- reqMaxReplicas := asd ["MaxReplicas" ].(float64 )
3271- reqMinReplicas := asd ["MinReplicas" ].(float64 )
3272- version := ""
3273- group := autoscaling .ServiceName
3274- kind := "HorizontalPodAutoscaler"
3275- resourceName := fmt .Sprintf ("%s-%s" , appName , "hpa" )
3276- resourceManifest := make (map [string ]interface {})
3277- if IsAcdApp (appDeploymentType ) {
3278- query := & application2.ApplicationResourceRequest {
3279- Name : & appName ,
3280- Version : & version ,
3281- Group : & group ,
3282- Kind : & kind ,
3283- ResourceName : & resourceName ,
3284- Namespace : & namespace ,
3285- }
3286- recv , err := impl .acdClient .GetResource (ctx , query )
3287- impl .logger .Debugw ("resource manifest get replica count" , "response" , recv )
3288- if err != nil {
3289- impl .logger .Errorw ("ACD Get Resource API Failed" , "err" , err )
3290- middleware .AcdGetResourceCounter .WithLabelValues (strconv .Itoa (appId ), namespace , appName ).Inc ()
3291- return merged
3292- }
3293- if recv != nil && len (* recv .Manifest ) > 0 {
3294- err := json .Unmarshal ([]byte (* recv .Manifest ), & resourceManifest )
3295- if err != nil {
3296- impl .logger .Errorw ("unmarshal failed for hpa check" , "err" , err )
3297- return merged
3298- }
3299- }
3300- } else {
3301- version = "v2beta2"
3302- k8sResource , err := impl .k8sApplicationService .GetResource (ctx , & k8s.ResourceRequestBean {ClusterId : clusterId ,
3303- K8sRequest : & application3.K8sRequestBean {ResourceIdentifier : application3.ResourceIdentifier {Name : resourceName ,
3304- Namespace : namespace , GroupVersionKind : schema.GroupVersionKind {Group : group , Kind : kind , Version : version }}}})
3305- if err != nil {
3306- impl .logger .Errorw ("error occurred while fetching resource for app" , "resourceName" , resourceName , "err" , err )
3307- return merged
3308- }
3309- resourceManifest = k8sResource .Manifest .Object
3310- }
3311- if len (resourceManifest ) > 0 {
3312- statusMap := resourceManifest ["status" ].(map [string ]interface {})
3313- currentReplicaVal := statusMap ["currentReplicas" ]
3314- currentReplicaCount , err := util2 .ParseFloatNumber (currentReplicaVal )
3315- if err != nil {
3316- impl .logger .Errorw ("error occurred while parsing replica count" , "currentReplicas" , currentReplicaVal , "err" , err )
3317- return merged
3318- }
33193327
3320- reqReplicaCount = impl .fetchRequiredReplicaCount (currentReplicaCount , reqMaxReplicas , reqMinReplicas )
3321- templateMap ["replicaCount" ] = reqReplicaCount
3322- merged , err = json .Marshal (& templateMap )
3328+ hpaResourceRequest := impl .getAutoScalingReplicaCount (templateMap , appName )
3329+ impl .logger .Debugw ("autoscalingCheckBeforeTrigger" , "hpaResourceRequest" , hpaResourceRequest )
3330+ if hpaResourceRequest .IsEnable {
3331+ resourceManifest := make (map [string ]interface {})
3332+ if IsAcdApp (appDeploymentType ) {
3333+ query := & application2.ApplicationResourceRequest {
3334+ Name : & appName ,
3335+ Version : & hpaResourceRequest .Version ,
3336+ Group : & hpaResourceRequest .Group ,
3337+ Kind : & hpaResourceRequest .Kind ,
3338+ ResourceName : & hpaResourceRequest .ResourceName ,
3339+ Namespace : & namespace ,
3340+ }
3341+ recv , err := impl .acdClient .GetResource (ctx , query )
3342+ impl .logger .Debugw ("resource manifest get replica count" , "response" , recv )
3343+ if err != nil {
3344+ impl .logger .Errorw ("ACD Get Resource API Failed" , "err" , err )
3345+ middleware .AcdGetResourceCounter .WithLabelValues (strconv .Itoa (appId ), namespace , appName ).Inc ()
3346+ return merged
3347+ }
3348+ if recv != nil && len (* recv .Manifest ) > 0 {
3349+ err := json .Unmarshal ([]byte (* recv .Manifest ), & resourceManifest )
33233350 if err != nil {
3324- impl .logger .Errorw ("marshaling failed for hpa check" , "err" , err )
3351+ impl .logger .Errorw ("unmarshal failed for hpa check" , "err" , err )
33253352 return merged
33263353 }
33273354 }
33283355 } else {
3329- impl .logger .Errorw ("autoscaling is not enabled" , "pipelineId" , pipelineId )
3356+ version := "v2beta2"
3357+ k8sResource , err := impl .k8sApplicationService .GetResource (ctx , & k8s.ResourceRequestBean {ClusterId : clusterId ,
3358+ K8sRequest : & application3.K8sRequestBean {ResourceIdentifier : application3.ResourceIdentifier {Name : hpaResourceRequest .ResourceName ,
3359+ Namespace : namespace , GroupVersionKind : schema.GroupVersionKind {Group : hpaResourceRequest .Group , Kind : hpaResourceRequest .Kind , Version : version }}}})
3360+ if err != nil {
3361+ impl .logger .Errorw ("error occurred while fetching resource for app" , "resourceName" , hpaResourceRequest .ResourceName , "err" , err )
3362+ return merged
3363+ }
3364+ resourceManifest = k8sResource .Manifest .Object
3365+ }
3366+ if len (resourceManifest ) > 0 {
3367+ statusMap := resourceManifest ["status" ].(map [string ]interface {})
3368+ currentReplicaVal := statusMap ["currentReplicas" ]
3369+ currentReplicaCount , err := util2 .ParseFloatNumber (currentReplicaVal )
3370+ if err != nil {
3371+ impl .logger .Errorw ("error occurred while parsing replica count" , "currentReplicas" , currentReplicaVal , "err" , err )
3372+ return merged
3373+ }
3374+
3375+ reqReplicaCount := impl .fetchRequiredReplicaCount (currentReplicaCount , hpaResourceRequest .ReqMaxReplicas , hpaResourceRequest .ReqMinReplicas )
3376+ templateMap ["replicaCount" ] = reqReplicaCount
3377+ merged , err = json .Marshal (& templateMap )
3378+ if err != nil {
3379+ impl .logger .Errorw ("marshaling failed for hpa check" , "err" , err )
3380+ return merged
3381+ }
33303382 }
3383+ } else {
3384+ impl .logger .Errorw ("autoscaling is not enabled" , "pipelineId" , pipelineId )
33313385 }
3386+
33323387 //check for custom chart support
33333388 if autoscalingEnabledPath , ok := templateMap [bean2 .CustomAutoScalingEnabledPathKey ]; ok {
33343389 if deploymentType == models .DEPLOYMENTTYPE_STOP {
0 commit comments