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  }