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

     1  package replicas
     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/base"
     9  )
    10  
    11  var _ recommender.Recommender = &ReplicasRecommender{}
    12  
    13  type ReplicasRecommender struct {
    14  	base.BaseRecommender
    15  	WorkloadMinReplicas  int64
    16  	PodMinReadySeconds   int64
    17  	PodAvailableRatio    float64
    18  	CpuPercentile        float64
    19  	MemPercentile        float64
    20  	DefaultMinReplicas   int64
    21  	CPUTargetUtilization float64
    22  	MemTargetUtilization float64
    23  }
    24  
    25  func init() {
    26  	recommender.RegisterRecommenderProvider(recommender.ReplicasRecommender, NewReplicasRecommender)
    27  }
    28  
    29  func (rr *ReplicasRecommender) Name() string {
    30  	return recommender.ReplicasRecommender
    31  }
    32  
    33  // NewReplicasRecommender create a new replicas recommender.
    34  func NewReplicasRecommender(recommender apis.Recommender, recommendationRule analysisv1alph1.RecommendationRule) (recommender.Recommender, error) {
    35  	recommender = config.MergeRecommenderConfigFromRule(recommender, recommendationRule)
    36  
    37  	workloadMinReplicasInt, err := recommender.GetConfigInt("workload-min-replicas", 1)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	podMinReadySeconds, err := recommender.GetConfigInt("pod-min-ready-seconds", 30)
    43  	if err != nil {
    44  		return nil, err
    45  	}
    46  
    47  	podAvailableRatio, err := recommender.GetConfigFloat("pod-available-ratio", 0.5)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  
    52  	cpuPercentileFloat, err := recommender.GetConfigFloat("cpu-percentile", 0.95)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  	cpuPercentileFloat = cpuPercentileFloat * 100
    57  
    58  	memPercentileFloat, err := recommender.GetConfigFloat("mem-percentile", 0.95)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	memPercentileFloat = memPercentileFloat * 100
    63  
    64  	defaultMinReplicasInt, err := recommender.GetConfigInt("default-min-replicas", 1)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  
    69  	cpuTargetUtilizationFloat, err := recommender.GetConfigFloat("cpu-target-utilization", 0.5)
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	memTargetUtilizationFloat, err := recommender.GetConfigFloat("mem-target-utilization", 0.5)
    75  	if err != nil {
    76  		return nil, err
    77  	}
    78  
    79  	return &ReplicasRecommender{
    80  		*base.NewBaseRecommender(recommender),
    81  		workloadMinReplicasInt,
    82  		podMinReadySeconds,
    83  		podAvailableRatio,
    84  		cpuPercentileFloat,
    85  		memPercentileFloat,
    86  		defaultMinReplicasInt,
    87  		cpuTargetUtilizationFloat,
    88  		memTargetUtilizationFloat,
    89  	}, nil
    90  }