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 }