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

     1  package service
     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  	netReceiveBytesKey       = "net-receive-bytes"
    13  	netReceivePercentileKey  = "net-receive-percentile"
    14  	netTransferBytesKey      = "net-transfer-bytes"
    15  	netTransferPercentileKey = "net-transfer-percentile"
    16  )
    17  
    18  var _ recommender.Recommender = &ServiceRecommender{}
    19  
    20  type ServiceRecommender struct {
    21  	base.BaseRecommender
    22  	netReceiveBytes       float64
    23  	netReceivePercentile  float64
    24  	netTransferBytes      float64
    25  	netTransferPercentile float64
    26  }
    27  
    28  func init() {
    29  	recommender.RegisterRecommenderProvider(recommender.ServiceRecommender, NewServiceRecommender)
    30  }
    31  
    32  func (s *ServiceRecommender) Name() string {
    33  	return recommender.ServiceRecommender
    34  }
    35  
    36  // NewServiceRecommender create a new service recommender.
    37  func NewServiceRecommender(recommender apis.Recommender, recommendationRule analysisv1alph1.RecommendationRule) (recommender.Recommender, error) {
    38  	recommender = config.MergeRecommenderConfigFromRule(recommender, recommendationRule)
    39  
    40  	netReceiveBytes, err := recommender.GetConfigFloat(netReceiveBytesKey, 0)
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  
    45  	netReceivePercentile, err := recommender.GetConfigFloat(netReceivePercentileKey, 0.95)
    46  	if err != nil {
    47  		return nil, err
    48  	}
    49  	netReceivePercentile = netReceivePercentile * 100
    50  
    51  	netTransferBytes, err := recommender.GetConfigFloat(netTransferBytesKey, 0)
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  
    56  	netTransferPercentile, err := recommender.GetConfigFloat(netTransferPercentileKey, 0.95)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  	netTransferPercentile = netTransferPercentile * 100
    61  
    62  	return &ServiceRecommender{
    63  		*base.NewBaseRecommender(recommender),
    64  		netReceiveBytes,
    65  		netReceivePercentile,
    66  		netTransferBytes,
    67  		netTransferPercentile,
    68  	}, nil
    69  }