custom alerting resolve conflicts

Signed-off-by: junotx <junotx@126.com>
This commit is contained in:
junotx
2021-01-07 17:32:37 +08:00
parent 9831eb3533
commit 6f9d306368
37 changed files with 14 additions and 3053 deletions

View File

@@ -17,8 +17,8 @@ limitations under the License.
package v1alpha1
import (
promresourcesclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"github.com/emicklei/go-restful"
promresourcesclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"k8s.io/klog"
ksapi "kubesphere.io/kubesphere/pkg/api"
"kubesphere.io/kubesphere/pkg/api/customalerting/v1alpha1"

View File

@@ -19,9 +19,9 @@ package v1alpha1
import (
"net/http"
promresourcesclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"github.com/emicklei/go-restful"
restfulspec "github.com/emicklei/go-restful-openapi"
promresourcesclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"k8s.io/apimachinery/pkg/runtime/schema"
ksapi "kubesphere.io/kubesphere/pkg/api"
customalertingv1alpha1 "kubesphere.io/kubesphere/pkg/api/customalerting/v1alpha1"

View File

@@ -1,147 +0,0 @@
package v1alpha1
import (
"encoding/json"
"fmt"
"net/http"
"os"
"testing"
"github.com/emicklei/go-restful"
restfulspec "github.com/emicklei/go-restful-openapi"
"github.com/go-openapi/spec"
promresourcesclient "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned"
"github.com/prometheus/prometheus/promql/parser"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"kubesphere.io/kubesphere/pkg/apiserver/runtime"
"kubesphere.io/kubesphere/pkg/constants"
"kubesphere.io/kubesphere/pkg/informers"
"kubesphere.io/kubesphere/pkg/simple/client/customalerting"
)
func TestTest(t *testing.T) {
expr := `increase((max by(job) (etcd_server_leader_changes_seen_total{job=~".*etcd.*"}) or 0 * absent(etcd_server_leader_changes_seen_total{job=~".*etcd.*"}))[15m:1m]) >= 3`
//expr = `absent_over_time(sum(nonexistent{job="myjob"})[1h:])`
pexpr, err := parser.ParseExpr(expr)
if err != nil {
panic(err)
}
fmt.Println(pexpr.String())
}
func TestApis(t *testing.T) {
kubeconfig := "D:/ks/conf/ks3-config"
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
panic(err)
}
k8sClient := kubernetes.NewForConfigOrDie(config)
promResourcesClient := promresourcesclient.NewForConfigOrDie(config)
option := &customalerting.Options{
PrometheusEndpoint: "http://139.198.112.79:39090/",
ThanosRulerEndpoint: "http://139.198.112.79:39091/",
ThanosRuleResourceLabels: "role=thanos-alerting-rules,thanosruler:thanos-ruler",
}
ruleClient, err := customalerting.NewRuleClient(option)
if err != nil {
panic(err)
}
stopCh := make(chan struct{})
informerFactory := informers.NewInformerFactories(k8sClient, nil, nil, nil, nil, promResourcesClient)
k8sGVRs := []schema.GroupVersionResource{
{Group: "", Version: "v1", Resource: "namespaces"},
}
for _, gvr := range k8sGVRs {
_, err = informerFactory.KubernetesSharedInformerFactory().ForResource(gvr)
if err != nil {
panic(err)
}
}
prometheusGVRs := []schema.GroupVersionResource{
{Group: "monitoring.coreos.com", Version: "v1", Resource: "prometheuses"},
{Group: "monitoring.coreos.com", Version: "v1", Resource: "prometheusrules"},
{Group: "monitoring.coreos.com", Version: "v1", Resource: "thanosrulers"},
}
for _, gvr := range prometheusGVRs {
_, err = informerFactory.PrometheusSharedInformerFactory().ForResource(gvr)
if err != nil {
panic(err)
}
}
informerFactory.Start(stopCh)
informerFactory.KubernetesSharedInformerFactory().WaitForCacheSync(stopCh)
informerFactory.PrometheusSharedInformerFactory().WaitForCacheSync(stopCh)
informerFactory.Start(stopCh)
container := restful.NewContainer()
AddToContainer(container, informerFactory, promResourcesClient, ruleClient, option)
server := &http.Server{}
server.Handler = container
if err := server.ListenAndServe(); err != nil {
panic(err)
}
}
func TestGenSwaggerJson(t *testing.T) {
container := runtime.Container
informerFactory := informers.NewNullInformerFactory()
AddToContainer(container, informerFactory, nil, nil, nil)
swagger := restfulspec.BuildSwagger(restfulspec.Config{
WebServices: container.RegisteredWebServices(),
PostBuildSwaggerObjectHandler: enrichSwaggerObject,
})
swagger.Info.Extensions = make(spec.Extensions)
swagger.Info.Extensions.Add("x-tagGroups", []struct {
Name string `json:"name"`
Tags []string `json:"tags"`
}{
{
Name: "Custom Alerting",
Tags: []string{constants.CustomAlertingTag},
},
})
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", "\t")
enc.Encode(swagger)
}
func enrichSwaggerObject(swo *spec.Swagger) {
swo.Info = &spec.Info{
InfoProps: spec.InfoProps{
Title: "KubeSphere",
Description: "KubeSphere OpenAPI",
Contact: &spec.ContactInfo{
ContactInfoProps: spec.ContactInfoProps{
Name: "KubeSphere",
URL: "https://kubesphere.io/",
Email: "kubesphere@yunify.com",
},
},
License: &spec.License{
LicenseProps: spec.LicenseProps{
Name: "Apache 2.0",
URL: "https://www.apache.org/licenses/LICENSE-2.0.html",
},
},
Version: "0.1.0",
}}
// setup security definitions
swo.SecurityDefinitions = map[string]*spec.SecurityScheme{
"jwt": spec.APIKeyAuth("Authorization", "header"),
}
swo.Security = []map[string][]string{{"jwt": []string{}}}
}