package k8s import ( "encoding/json" "fmt" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/util" "strings" v1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" ) var ( PrometheusRuleGroup = "monitoring.beagle.io" // kubectl api-resources | grep -i prome PrometheusRuleVersion = "v1" PrometheusRuleKind = "PrometheusRule" PrometheusRuleApiVersion = PrometheusRuleGroup + "/" + PrometheusRuleVersion PrometheusRuleName = strings.ToLower(PrometheusRuleKind) + "s." + PrometheusRuleGroup ) type PrometheusRule struct { Header map[string]string } func (p PrometheusRule) Create(pRule *v1.PrometheusRule) error { k8sSvc := K8sSvc{Header: p.Header} c := &Content{Kind: PrometheusRuleKind, ApiVersion: PrometheusRuleApiVersion, Metadata: pRule.ObjectMeta, Spec: pRule.Spec} _, err := k8sSvc.SendFile(c) return err } func (p PrometheusRule) Delete(namespace string, name string) error { delUrl := fmt.Sprintf("%s/kubernetes/api/v1/_raw/%s/namespace/%s/name/%s", conf.Options.AweRestURL, PrometheusRuleName, namespace, name) _, err := util.ProxySendRes("DELETE", delUrl, "", p.Header) return err } func (p PrometheusRule) Update(pRule *v1.PrometheusRule) error { updateUrl := fmt.Sprintf("%s/kubernetes/api/v1/_raw/%s/namespace/%s/name/%s", conf.Options.AweRestURL, PrometheusRuleName, pRule.Namespace, pRule.Name) body, _ := json.Marshal(pRule) p.Header["Content-Type"] = "application/json" _, err := util.ProxySendRes("PUT", updateUrl, string(body), p.Header) return err } func (p PrometheusRule) Get(namespace string, name string) (obj *v1.PrometheusRule, err error) { // http://awecloud-rest/awecloud/rest/kubernetes/api/v1/_raw/prometheusrules.monitoring.coreos.com/namespace/kube-public/name/nginx getUrl := fmt.Sprintf("%s/kubernetes/api/v1/_raw/%s/namespace/%s/name/%s", conf.Options.AweRestURL, PrometheusRuleName, namespace, name) res, err := util.ProxySendRes("GET", getUrl, "", p.Header) if err != nil { return } err = json.Unmarshal(res, &obj) return }