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 }