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 }