github.com/gocrane/crane@v0.11.0/pkg/utils/recommend.go (about) 1 package utils 2 3 import ( 4 "fmt" 5 "strconv" 6 "time" 7 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 "k8s.io/apimachinery/pkg/runtime/schema" 10 "k8s.io/client-go/discovery" 11 12 analysisv1alpha1 "github.com/gocrane/api/analysis/v1alpha1" 13 14 "github.com/gocrane/crane/pkg/known" 15 ) 16 17 func GetGroupVersionResource(discoveryClient discovery.DiscoveryInterface, apiVersion string, kind string) (*schema.GroupVersionResource, error) { 18 resList, err := discoveryClient.ServerResourcesForGroupVersion(apiVersion) 19 if err != nil { 20 return nil, err 21 } 22 23 var resName string 24 for _, res := range resList.APIResources { 25 if kind == res.Kind { 26 resName = res.Name 27 break 28 } 29 } 30 if resName == "" { 31 return nil, fmt.Errorf("invalid kind %s", kind) 32 } 33 34 gv, err := schema.ParseGroupVersion(apiVersion) 35 if err != nil { 36 return nil, err 37 } 38 gvr := gv.WithResource(resName) 39 return &gvr, nil 40 } 41 42 func IsRecommendationControlledByRule(recommend *analysisv1alpha1.Recommendation) bool { 43 for _, ownerReference := range recommend.OwnerReferences { 44 if ownerReference.Kind == "RecommendationRule" { 45 return true 46 } 47 } 48 return false 49 } 50 51 func SetRunNumber(recommendation *analysisv1alpha1.Recommendation, runNumber int32) { 52 if recommendation.Annotations == nil { 53 recommendation.Annotations = map[string]string{} 54 } 55 recommendation.Annotations[known.RunNumberAnnotation] = strconv.Itoa(int(runNumber)) 56 } 57 58 func GetRunNumber(recommendation *analysisv1alpha1.Recommendation) (int32, error) { 59 val, ok := recommendation.Annotations[known.RunNumberAnnotation] 60 if ok && len(val) != 0 { 61 runNumberInt, err := strconv.ParseInt(val, 10, 32) 62 return int32(runNumberInt), err 63 } 64 65 return 0, fmt.Errorf("get runNumber failed") 66 } 67 68 func GetRecommendationRuleOwnerReference(recommend *analysisv1alpha1.Recommendation) *metav1.OwnerReference { 69 for _, ownerReference := range recommend.OwnerReferences { 70 if ownerReference.Kind == "RecommendationRule" || ownerReference.Kind == "Analytics" { 71 return &ownerReference 72 } 73 } 74 return nil 75 } 76 77 func GetLastStartTime(recommendation *analysisv1alpha1.Recommendation) (time.Time, error) { 78 if recommendation != nil && recommendation.Annotations != nil { 79 val, ok := recommendation.Annotations[known.LastStartTimeAnnotation] 80 if ok && len(val) != 0 { 81 return time.Parse("2006-01-02 15:04:05", val) 82 } 83 } 84 85 return time.Now(), fmt.Errorf("get lastStartTime failed") 86 } 87 88 func SetLastStartTime(recommendation *analysisv1alpha1.Recommendation) { 89 if recommendation != nil && recommendation.Annotations != nil { 90 if recommendation.Annotations == nil { 91 recommendation.Annotations = map[string]string{} 92 } 93 94 now := time.Now() 95 loc, _ := time.LoadLocation("UTC") 96 recommendation.Annotations[known.LastStartTimeAnnotation] = now.In(loc).Format("2006-01-02 15:04:05") 97 } 98 }