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

     1  package replicas
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  
     7  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
     8  
     9  	"github.com/gocrane/crane/pkg/metrics"
    10  	"github.com/gocrane/crane/pkg/recommendation/framework"
    11  )
    12  
    13  // Observe enhance the observability.
    14  func (rr *ReplicasRecommender) Observe(ctx *framework.RecommendationContext) error {
    15  	if ctx.Recommendation.Status.Action == "Patch" {
    16  		// get new PodTemplate
    17  		var newObject map[string]interface{}
    18  		if err := json.Unmarshal([]byte(ctx.Recommendation.Status.RecommendedInfo), &newObject); err != nil {
    19  			return err
    20  		}
    21  
    22  		replicas, found, err := unstructured.NestedFloat64(newObject, "spec", "replicas")
    23  		if !found || err != nil {
    24  			return fmt.Errorf("get replicas from unstructed object failed. ")
    25  		}
    26  
    27  		labels := map[string]string{
    28  			"apiversion": ctx.Recommendation.Spec.TargetRef.APIVersion,
    29  			"owner_kind": ctx.Recommendation.Spec.TargetRef.Kind,
    30  			"namespace":  ctx.Recommendation.Spec.TargetRef.Namespace,
    31  			"owner_name": ctx.Recommendation.Spec.TargetRef.Name,
    32  		}
    33  		metrics.ReplicasRecommendation.With(labels).Set(replicas)
    34  
    35  	}
    36  
    37  	return nil
    38  }