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 }