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

     1  package idlenode
     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  const (
    12  	cpuRequestUtilizationKey    = "cpu-request-utilization"
    13  	cpuUsageUtilizationKey      = "cpu-usage-utilization"
    14  	cpuPercentileKey            = "cpu-percentile"
    15  	memoryRequestUtilizationKey = "memory-request-utilization"
    16  	memoryUsageUtilizationKey   = "memory-usage-utilization"
    17  	memoryPercentileKey         = "memory-percentile"
    18  )
    19  
    20  var _ recommender.Recommender = &IdleNodeRecommender{}
    21  
    22  type IdleNodeRecommender struct {
    23  	base.BaseRecommender
    24  	cpuRequestUtilization    float64
    25  	cpuUsageUtilization      float64
    26  	cpuPercentile            float64
    27  	memoryRequestUtilization float64
    28  	memoryUsageUtilization   float64
    29  	memoryPercentile         float64
    30  }
    31  
    32  func init() {
    33  	recommender.RegisterRecommenderProvider(recommender.IdleNodeRecommender, NewIdleNodeRecommender)
    34  }
    35  
    36  func (inr *IdleNodeRecommender) Name() string {
    37  	return recommender.IdleNodeRecommender
    38  }
    39  
    40  // NewIdleNodeRecommender create a new idle node recommender.
    41  func NewIdleNodeRecommender(recommender apis.Recommender, recommendationRule analysisv1alph1.RecommendationRule) (recommender.Recommender, error) {
    42  	recommender = config.MergeRecommenderConfigFromRule(recommender, recommendationRule)
    43  
    44  	cpuRequestUtilization, err := recommender.GetConfigFloat(cpuRequestUtilizationKey, 0)
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  
    49  	cpuUsageUtilization, err := recommender.GetConfigFloat(cpuUsageUtilizationKey, 0)
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  	cpuPercentile, err := recommender.GetConfigFloat(cpuPercentileKey, 0.99)
    54  	if err != nil {
    55  		return nil, err
    56  	}
    57  	cpuPercentile = cpuPercentile * 100
    58  
    59  	memoryRequestUtilization, err := recommender.GetConfigFloat(memoryRequestUtilizationKey, 0)
    60  	if err != nil {
    61  		return nil, err
    62  	}
    63  
    64  	memoryUsageUtilization, err := recommender.GetConfigFloat(memoryUsageUtilizationKey, 0)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  	memoryPercentile, err := recommender.GetConfigFloat(memoryPercentileKey, 0.99)
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  	memoryPercentile = memoryPercentile * 100
    73  
    74  	return &IdleNodeRecommender{
    75  		*base.NewBaseRecommender(recommender),
    76  		cpuRequestUtilization,
    77  		cpuUsageUtilization,
    78  		cpuPercentile,
    79  		memoryRequestUtilization,
    80  		memoryUsageUtilization,
    81  		memoryPercentile,
    82  	}, err
    83  }