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

     1  package service
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/gocrane/crane/pkg/recommendation/framework"
     7  )
     8  
     9  func (s *ServiceRecommender) PreRecommend(ctx *framework.RecommendationContext) error {
    10  	return nil
    11  }
    12  
    13  func (s *ServiceRecommender) Recommend(ctx *framework.RecommendationContext) error {
    14  	if len(ctx.Pods) == 0 {
    15  		ctx.Recommendation.Status.Action = "Delete"
    16  		ctx.Recommendation.Status.Description = "It is a Orphan Service, Pod count is 0"
    17  		return nil
    18  	}
    19  
    20  	// check if pod net receive percentile bytes lt config value
    21  	if s.netReceiveBytes != 0 {
    22  		netReceiveBytes, err := s.BaseRecommender.GetPercentile(s.netReceivePercentile, ctx.InputValue(netReceiveBytesKey))
    23  		if err != nil {
    24  			return err
    25  		}
    26  		if netReceiveBytes > s.netReceiveBytes {
    27  			return fmt.Errorf("Service %s is not a Orphan Service, because the config value is %f, but the net receive %f percentile bytes is %f ",
    28  				ctx.Object.GetName(), s.netReceiveBytes, s.netReceivePercentile, netReceiveBytes)
    29  		}
    30  	}
    31  
    32  	// check if pod net transfer percentile bytes lt config value
    33  	if s.netTransferBytes != 0 {
    34  		netTransferBytes, err := s.BaseRecommender.GetPercentile(s.netTransferPercentile, ctx.InputValue(netTransferBytesKey))
    35  		if err != nil {
    36  			return err
    37  		}
    38  		if netTransferBytes > s.netTransferBytes {
    39  			return fmt.Errorf("Service %s is not a Orphan Service, because the config value is %f, but the net transfer %f percentile bytes is %f ",
    40  				ctx.Object.GetName(), s.netTransferBytes, s.netTransferPercentile, netTransferBytes)
    41  		}
    42  	}
    43  
    44  	ctx.Recommendation.Status.Action = "Delete"
    45  	ctx.Recommendation.Status.Description = "It is a Orphan Service, Pod net bytes low"
    46  	return nil
    47  }
    48  
    49  // Policy add some logic for result of recommend phase.
    50  func (s *ServiceRecommender) Policy(ctx *framework.RecommendationContext) error {
    51  	return nil
    52  }