github.com/gocrane/crane@v0.11.0/pkg/recommendation/recommender/resource/registry.go (about) 1 package resource 2 3 import ( 4 "time" 5 6 analysisv1alph1 "github.com/gocrane/api/analysis/v1alpha1" 7 "github.com/gocrane/crane/pkg/recommendation/config" 8 "github.com/gocrane/crane/pkg/recommendation/recommender" 9 "github.com/gocrane/crane/pkg/recommendation/recommender/apis" 10 "github.com/gocrane/crane/pkg/recommendation/recommender/base" 11 ) 12 13 var _ recommender.Recommender = &ResourceRecommender{} 14 15 type ResourceRecommender struct { 16 base.BaseRecommender 17 CpuSampleInterval string 18 CpuRequestPercentile string 19 CpuRequestMarginFraction string 20 CpuTargetUtilization string 21 CpuModelHistoryLength string 22 MemSampleInterval string 23 MemPercentile string 24 MemMarginFraction string 25 MemTargetUtilization string 26 MemHistoryLength string 27 OOMProtection bool 28 OOMHistoryLength time.Duration 29 OOMBumpRatio float64 30 Specification bool 31 SpecificationConfigs []Specification 32 CpuHistogramBucketSize string 33 CpuHistogramMaxValue string 34 MemHistogramBucketSize string 35 MemHistogramMaxValue string 36 } 37 38 func init() { 39 recommender.RegisterRecommenderProvider(recommender.ResourceRecommender, NewResourceRecommender) 40 } 41 42 func (rr *ResourceRecommender) Name() string { 43 return recommender.ResourceRecommender 44 } 45 46 // NewResourceRecommender create a new resource recommender. 47 func NewResourceRecommender(recommender apis.Recommender, recommendationRule analysisv1alph1.RecommendationRule) (recommender.Recommender, error) { 48 recommender = config.MergeRecommenderConfigFromRule(recommender, recommendationRule) 49 50 cpuSampleInterval := recommender.GetConfigString("cpu-sample-interval", "1m") 51 cpuPercentile := recommender.GetConfigString("cpu-request-percentile", "0.99") 52 cpuMarginFraction := recommender.GetConfigString("cpu-request-margin-fraction", "0.15") 53 cpuTargetUtilization := recommender.GetConfigString("cpu-target-utilization", "1.0") 54 cpuHistoryLength := recommender.GetConfigString("cpu-model-history-length", "168h") 55 memSampleInterval := recommender.GetConfigString("mem-sample-interval", "1m") 56 memPercentile := recommender.GetConfigString("mem-request-percentile", "0.99") 57 memMarginFraction := recommender.GetConfigString("mem-request-margin-fraction", "0.15") 58 memTargetUtilization := recommender.GetConfigString("mem-target-utilization", "1.0") 59 memHistoryLength := recommender.GetConfigString("mem-model-history-length", "168h") 60 61 specificationBool, err := recommender.GetConfigBool("specification", false) 62 if err != nil { 63 return nil, err 64 } 65 66 specificationConfig := recommender.GetConfigString("specification-config", DefaultSpecs) 67 specifications, err := GetResourceSpecifications(specificationConfig) 68 if err != nil { 69 return nil, err 70 } 71 72 oomProtectionBool, err := recommender.GetConfigBool("oom-protection", true) 73 if err != nil { 74 return nil, err 75 } 76 77 oomHistoryLengthDuration, err := recommender.GetConfigDuration("oom-history-length", 168*time.Hour) 78 if err != nil { 79 return nil, err 80 } 81 82 OOMBumpRatioFloat, err := recommender.GetConfigFloat("oom-bump-ratio", 1.2) 83 if err != nil { 84 return nil, err 85 } 86 87 cpuHistogramBucketSize := recommender.GetConfigString("cpu-histogram-bucket-size", "0.1") 88 cpuHistogramMaxValue := recommender.GetConfigString("cpu-histogram-max-value", "100") 89 memHistogramBucketSize := recommender.GetConfigString("mem-histogram-bucket-size", "104857600") 90 memHistogramMaxValue := recommender.GetConfigString("mem-histogram-max-value", "104857600000") 91 92 return &ResourceRecommender{ 93 *base.NewBaseRecommender(recommender), 94 cpuSampleInterval, 95 cpuPercentile, 96 cpuMarginFraction, 97 cpuTargetUtilization, 98 cpuHistoryLength, 99 memSampleInterval, 100 memPercentile, 101 memMarginFraction, 102 memTargetUtilization, 103 memHistoryLength, 104 oomProtectionBool, 105 oomHistoryLengthDuration, 106 OOMBumpRatioFloat, 107 specificationBool, 108 specifications, 109 cpuHistogramBucketSize, 110 cpuHistogramMaxValue, 111 memHistogramBucketSize, 112 memHistogramMaxValue, 113 }, nil 114 }