github.com/gocrane/crane@v0.11.0/pkg/recommendation/recommender/hpa/registry.go (about)

     1  package hpa
     2  
     3  import (
     4  	analysisv1alph1 "github.com/gocrane/api/analysis/v1alpha1"
     5  	"github.com/gocrane/crane/pkg/recommendation/config"
     6  	"github.com/gocrane/crane/pkg/recommendation/recommender"
     7  	"github.com/gocrane/crane/pkg/recommendation/recommender/apis"
     8  	"github.com/gocrane/crane/pkg/recommendation/recommender/replicas"
     9  )
    10  
    11  var _ recommender.Recommender = &HPARecommender{}
    12  
    13  type HPARecommender struct {
    14  	replicas.ReplicasRecommender
    15  	PredictableEnabled      bool
    16  	ReferenceHpaEnabled     bool
    17  	MinCpuUsageThreshold    float64
    18  	FluctuationThreshold    float64
    19  	MinCpuTargetUtilization int64
    20  	MaxCpuTargetUtilization int64
    21  	MaxReplicasFactor       float64
    22  }
    23  
    24  func init() {
    25  	recommender.RegisterRecommenderProvider(recommender.HPARecommender, NewHPARecommender)
    26  }
    27  
    28  func (rr *HPARecommender) Name() string {
    29  	return recommender.HPARecommender
    30  }
    31  
    32  // NewHPARecommender create a new hpa recommender.
    33  func NewHPARecommender(recommender apis.Recommender, recommendationRule analysisv1alph1.RecommendationRule) (recommender.Recommender, error) {
    34  	recommender = config.MergeRecommenderConfigFromRule(recommender, recommendationRule)
    35  
    36  	predictableEnabled, err := recommender.GetConfigBool("predictable", false)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	referenceHpaEnabled, err := recommender.GetConfigBool("reference-hpa", true)
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  
    46  	minCpuUsageThresholdFloat, err := recommender.GetConfigFloat("min-cpu-usage-threshold", 1)
    47  	if err != nil {
    48  		return nil, err
    49  	}
    50  
    51  	fluctuationThresholdFloat, err := recommender.GetConfigFloat("fluctuation-threshold", 1.5)
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  
    56  	minCpuTargetUtilizationInt, err := recommender.GetConfigInt("min-cpu-target-utilization", 30)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	maxCpuTargetUtilizationInt, err := recommender.GetConfigInt("max-cpu-target-utilization", 75)
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  
    66  	maxReplicasFactorFloat, err := recommender.GetConfigFloat("max-replicas-factor", 3)
    67  	if err != nil {
    68  		return nil, err
    69  	}
    70  
    71  	replicasRecommender, err := replicas.NewReplicasRecommender(recommender, recommendationRule)
    72  	if err != nil {
    73  		return nil, err
    74  	}
    75  
    76  	return &HPARecommender{
    77  		*(replicasRecommender.(*replicas.ReplicasRecommender)),
    78  		predictableEnabled,
    79  		referenceHpaEnabled,
    80  		minCpuUsageThresholdFloat,
    81  		fluctuationThresholdFloat,
    82  		minCpuTargetUtilizationInt,
    83  		maxCpuTargetUtilizationInt,
    84  		maxReplicasFactorFloat,
    85  	}, nil
    86  }