Skip to content

Commit d05fbba

Browse files
author
陈辉
committed
support metricsconfig's management
1 parent 56a62b5 commit d05fbba

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed

log_project.go

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import (
55
"encoding/json"
66
"fmt"
77
"io/ioutil"
8+
"log"
89
"net/http"
10+
"reflect"
911
"regexp"
1012
"strings"
1113
"time"
@@ -540,6 +542,135 @@ func (p *LogProject) DeleteMachineGroup(name string) (err error) {
540542
return nil
541543
}
542544

545+
func (p *LogProject) CreateMetricConfig(metricStore string, metricConfig *MetricsConfig) error {
546+
body, err := json.Marshal(metricConfig)
547+
if err != nil {
548+
return NewClientError(err)
549+
}
550+
jsonBody := map[string]interface{}{
551+
"metricStore": metricStore,
552+
"metricsConfigDetail": string(body),
553+
}
554+
body, err = json.Marshal(jsonBody)
555+
if err != nil {
556+
return NewClientError(err)
557+
}
558+
559+
h := map[string]string{
560+
"x-log-bodyrawsize": fmt.Sprintf("%v", len(body)),
561+
"Content-Type": "application/json",
562+
"Accept-Encoding": "deflate", // TODO: support lz4
563+
}
564+
r, err := request(p, "POST", "/metricsconfigs", h, body)
565+
if err != nil {
566+
return NewClientError(err)
567+
}
568+
defer r.Body.Close()
569+
body, err = ioutil.ReadAll(r.Body)
570+
if r.StatusCode != http.StatusOK {
571+
err := new(Error)
572+
json.Unmarshal(body, err)
573+
return err
574+
}
575+
return nil
576+
}
577+
578+
func (p *LogProject) DeleteMetricConfig(metricStore string) (err error) {
579+
h := map[string]string{
580+
"x-log-bodyrawsize": "0",
581+
}
582+
r, err := request(p, "DELETE", "/metricsconfigs/"+metricStore, h, nil)
583+
if err != nil {
584+
return NewClientError(err)
585+
}
586+
defer r.Body.Close()
587+
body, _ := ioutil.ReadAll(r.Body)
588+
if r.StatusCode != http.StatusOK {
589+
err := new(Error)
590+
json.Unmarshal(body, err)
591+
return err
592+
}
593+
return nil
594+
}
595+
596+
func (p *LogProject) GetMetricConfig(metricStore string) (*MetricsConfig, error) {
597+
h := map[string]string{
598+
"x-log-bodyrawsize": "0",
599+
}
600+
r, err := request(p, "GET", "/metricsconfigs/"+metricStore, h, nil)
601+
if err != nil {
602+
return nil, NewClientError(err)
603+
}
604+
defer r.Body.Close()
605+
buf, _ := ioutil.ReadAll(r.Body)
606+
if r.StatusCode != http.StatusOK {
607+
err := new(Error)
608+
json.Unmarshal(buf, err)
609+
return nil, err
610+
}
611+
type OuterJSON struct {
612+
MetricStore string `json:"metricStore"`
613+
MetricsConfigDetail string `json:"metricsConfigDetail"`
614+
}
615+
616+
var outerData OuterJSON
617+
if err := json.Unmarshal(buf, &outerData); err != nil {
618+
log.Fatalf("Error parsing outer JSON: %v", err)
619+
}
620+
621+
m := &MetricsConfig{}
622+
err = json.Unmarshal([]byte(outerData.MetricsConfigDetail), m)
623+
if err != nil {
624+
return nil, err
625+
}
626+
if IsDebugLevelMatched(4) {
627+
level.Info(Logger).Log("msg", "Get MetricConfig config, result", *m)
628+
}
629+
630+
if reflect.DeepEqual(m, MetricsConfig{}) {
631+
fmt.Println("MetricsConfig is empty")
632+
}
633+
634+
return m, err
635+
}
636+
637+
func (p *LogProject) UpdateMetricConfig(metricStore string, metricConfig *MetricsConfig) (err error) {
638+
body, err := json.Marshal(metricConfig)
639+
if err != nil {
640+
return NewClientError(err)
641+
}
642+
jsonBody := map[string]interface{}{
643+
"metricStore": metricStore,
644+
"metricsConfigDetail": string(body),
645+
}
646+
body, err = json.Marshal(jsonBody)
647+
if err != nil {
648+
return NewClientError(err)
649+
}
650+
body, err = json.Marshal(jsonBody)
651+
if err != nil {
652+
return NewClientError(err)
653+
}
654+
655+
h := map[string]string{
656+
"x-log-bodyrawsize": fmt.Sprintf("%v", len(body)),
657+
"Content-Type": "application/json",
658+
"Accept-Encoding": "deflate", // TODO: support lz4
659+
}
660+
r, err := request(p, "PUT", "/metricsconfigs/"+metricStore, h, body)
661+
if err != nil {
662+
return NewClientError(err)
663+
}
664+
defer r.Body.Close()
665+
body, _ = ioutil.ReadAll(r.Body)
666+
if r.StatusCode != http.StatusOK {
667+
err := new(Error)
668+
json.Unmarshal(body, err)
669+
return err
670+
}
671+
return nil
672+
}
673+
543674
// ListConfig returns config names list and the total number of configs.
544675
// The offset starts from 0 and the size is the max number of configs could be returned.
545676
func (p *LogProject) ListConfig(offset, size int) (cfgNames []string, total int, err error) {

0 commit comments

Comments
 (0)