Skip to content

Commit 9203eef

Browse files
authored
support metricsconfig's management for metricstore
support metricsconfig's management
2 parents 4bdd96c + d05fbba commit 9203eef

File tree

8 files changed

+318
-2
lines changed

8 files changed

+318
-2
lines changed

client_interface.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,15 @@ type ClientInterface interface {
203203
UpdateMachineGroup(project string, m *MachineGroup) (err error)
204204
// DeleteMachineGroup deletes machine group according machine group name.
205205
DeleteMachineGroup(project string, machineGroup string) (err error)
206+
207+
CreateMetricConfig(project string, metricStore string, metricConfig *MetricsConfig) error
208+
209+
DeleteMetricConfig(project string, metricStore string) error
210+
211+
UpdateMetricConfig(project string, metricStore string, metricConfig *MetricsConfig) error
212+
213+
GetMetricConfig(project string, metricStore string) (*MetricsConfig, error)
214+
206215
// ListConfig returns config names list and the total number of configs.
207216
// The offset starts from 0 and the size is the max number of configs could be returned.
208217
ListConfig(project string, offset, size int) (cfgNames []string, total int, err error)

client_project.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,26 @@ func (c *Client) DeleteMachineGroup(project string, machineGroup string) (err er
210210
return proj.DeleteMachineGroup(machineGroup)
211211
}
212212

213+
func (c *Client) CreateMetricConfig(project string, metricStore string, metricConfig *MetricsConfig) error {
214+
proj := convert(c, project)
215+
return proj.CreateMetricConfig(metricStore, metricConfig)
216+
}
217+
218+
func (c *Client) DeleteMetricConfig(project string, metricStore string) error {
219+
proj := convert(c, project)
220+
return proj.DeleteMetricConfig(metricStore)
221+
}
222+
223+
func (c *Client) GetMetricConfig(project string, metricStore string) (*MetricsConfig, error) {
224+
proj := convert(c, project)
225+
return proj.GetMetricConfig(metricStore)
226+
}
227+
228+
func (c *Client) UpdateMetricConfig(project string, metricStore string, metricConfig *MetricsConfig) error {
229+
proj := convert(c, project)
230+
return proj.UpdateMetricConfig(metricStore, metricConfig)
231+
}
232+
213233
// ListConfig returns config names list and the total number of configs.
214234
// The offset starts from 0 and the size is the max number of configs could be returned.
215235
func (c *Client) ListConfig(project string, offset, size int) (cfgNames []string, total int, err error) {

example/ingestion/s3_ingestion_sample.go renamed to example/ingestion/s3_ingestion_sample/s3_ingestion_sample.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"encoding/json"
55
"fmt"
6+
67
sls "github.com/aliyun/aliyun-log-go-sdk"
78
"github.com/aliyun/aliyun-log-go-sdk/example/util"
89
)
@@ -27,8 +28,8 @@ func main() {
2728

2829
s3Source := sls.S3Source{
2930
DataSource: sls.DataSource{DataSourceType: sls.DataSourceS3},
30-
AWSAccessKey: util.AWSAccessKey,
31-
AWSAccessKeySecret: util.AWSAccessKeySecret,
31+
AWSAccessKey: util.AccessKeyID,
32+
AWSAccessKeySecret: util.AccessKeySecret,
3233
AWSRegion: "", // TODO
3334
Bucket: "", // TODO
3435
Prefix: "", // TODO
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
sls "github.com/aliyun/aliyun-log-go-sdk"
7+
"github.com/aliyun/aliyun-log-go-sdk/example/util"
8+
)
9+
10+
func main() {
11+
config := "{\n \"parallel_config\": {\n \"enable\": true,\n \"mode\": \"static\",\n \"parallel_count_per_host\": 2,\n \"time_piece_count\": 0,\n \"time_piece_interval\": 21600,\n \"total_parallel_count\": 8\n },\n \"query_cache_config\": {\n \"enable\": true\n }\n}"
12+
var conf sls.MetricsConfig
13+
json.Unmarshal([]byte(config), &conf)
14+
err := util.Client.CreateMetricConfig("test_project", "test_metric", &conf)
15+
if err != nil {
16+
panic(err)
17+
}
18+
19+
Config, err := util.Client.GetMetricConfig("test_project", "test_metric")
20+
if err != nil {
21+
panic(err)
22+
}
23+
res, _ := json.Marshal(&Config)
24+
fmt.Println(string(res))
25+
26+
config01 := "{\n \"parallel_config\": {\n \"enable\": true,\n \"mode\": \"auto\",\n \"parallel_count_per_host\": 2,\n \"time_piece_count\": 6,\n \"time_piece_interval\": 21600,\n \"total_parallel_count\": 6\n },\n \"query_cache_config\": {\n \"enable\": true\n }\n}"
27+
json.Unmarshal([]byte(config01), &conf)
28+
err = util.Client.UpdateMetricConfig("test_project", "test_metric", &conf)
29+
if err != nil {
30+
panic(err)
31+
}
32+
33+
Config, err = util.Client.GetMetricConfig("test_project", "test_metric")
34+
if err != nil {
35+
panic(err)
36+
}
37+
res, _ = json.Marshal(&Config)
38+
fmt.Println("--------------------")
39+
fmt.Println(string(res))
40+
41+
err = util.Client.DeleteMetricConfig("test_project", "test_metric")
42+
if err != nil {
43+
panic(err)
44+
}
45+
}
File renamed without changes.

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) {

metric_config.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package sls
2+
3+
type MetricQueryCacheConfig struct {
4+
Enable bool `json:"enable"`
5+
}
6+
7+
type MetricParallelConfig struct {
8+
Enable bool `json:"enable"`
9+
Mode string `json:"mode"`
10+
TimePieceInterval int `json:"time_piece_interval"`
11+
TimePieceCount int `json:"time_piece_count"`
12+
ParallelCountPerHost int `json:"parallel_count_per_host"`
13+
TotalParallelCount int `json:"total_parallel_count"`
14+
}
15+
16+
type MetricDownSamplingConfig struct {
17+
Base MetricDownSamplingStatus `json:"base"`
18+
Downsampling []MetricDownSamplingStatus `json:"downsampling"`
19+
}
20+
21+
type MetricDownSamplingStatus struct {
22+
CreateTime int64 `json:"create_time"`
23+
TTL int `json:"ttl"`
24+
ResolutionSeconds int `json:"resolution_seconds"`
25+
}
26+
27+
type MetricPushdownConfig struct {
28+
Enable bool `json:"enable"`
29+
}
30+
31+
type MetricRemoteWriteConfig struct {
32+
Enable bool `json:"enable"`
33+
HistoryInterval int `json:"history_interval"`
34+
FutureInterval int `json:"future_interval"`
35+
ReplicaField string `json:"replica_field"`
36+
ReplicaTimeoutSeconds int `json:"replica_timeout_seconds"`
37+
ShardGroupStrategyList ShardGroupStrategyList `json:"shard_group_strategy_list"`
38+
}
39+
40+
type ShardGroupStrategyList struct {
41+
Strategies []ShardGroupStrategy `json:"strategies"`
42+
TryOtherShard bool `json:"try_other_shard"`
43+
LastUpdateTime int `json:"last_update_time"`
44+
}
45+
46+
type ShardGroupStrategy struct {
47+
MetricNames []string `json:"metric_names"`
48+
HashLabels []string `json:"hash_labels"`
49+
ShardGroupCount int `json:"shard_group_count"`
50+
Priority int `json:"priority"`
51+
}
52+
53+
type MetricStoreViewRoutingConfig struct {
54+
MetricNames []string `json:"metric_names"`
55+
ProjectStores []ProjectStore `json:"project_stores"`
56+
}
57+
58+
type ProjectStore struct {
59+
ProjectName string `json:"project"`
60+
MetricStore string `json:"metricstore"`
61+
}
62+
63+
type MetricsConfig struct {
64+
QueryCacheConfig MetricQueryCacheConfig `json:"query_cache_config"`
65+
ParallelConfig MetricParallelConfig `json:"parallel_config"`
66+
DownSamplingConfig MetricDownSamplingConfig `json:"downsampling_config"`
67+
PushdownConfig MetricPushdownConfig `json:"pushdown_config"`
68+
RemoteWriteConfig MetricRemoteWriteConfig `json:"remote_write_config"`
69+
StoreViewRoutingConfigs []MetricStoreViewRoutingConfig `json:"store_view_routing_config"`
70+
}

token_auto_update_client.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,46 @@ func (c *TokenAutoUpdateClient) DeleteMachineGroup(project string, machineGroup
441441
return
442442
}
443443

444+
func (c *TokenAutoUpdateClient) CreateMetricConfig(project string, metricStore string, metricConfig *MetricsConfig) (err error) {
445+
for i := 0; i < c.maxTryTimes; i++ {
446+
err = c.logClient.CreateMetricConfig(project, metricStore, metricConfig)
447+
if !c.processError(err) {
448+
return
449+
}
450+
}
451+
return
452+
}
453+
454+
func (c *TokenAutoUpdateClient) DeleteMetricConfig(project string, metricStore string) (err error) {
455+
for i := 0; i < c.maxTryTimes; i++ {
456+
err = c.logClient.DeleteMetricConfig(project, metricStore)
457+
if !c.processError(err) {
458+
return
459+
}
460+
}
461+
return
462+
}
463+
464+
func (c *TokenAutoUpdateClient) GetMetricConfig(project string, metricStore string) (metricConfig *MetricsConfig, err error) {
465+
for i := 0; i < c.maxTryTimes; i++ {
466+
metricConfig, err = c.logClient.GetMetricConfig(project, metricStore)
467+
if !c.processError(err) {
468+
return
469+
}
470+
}
471+
return
472+
}
473+
474+
func (c *TokenAutoUpdateClient) UpdateMetricConfig(project string, metricStore string, metricConfig *MetricsConfig) (err error) {
475+
for i := 0; i < c.maxTryTimes; i++ {
476+
err = c.logClient.UpdateMetricConfig(project, metricStore, metricConfig)
477+
if !c.processError(err) {
478+
return
479+
}
480+
}
481+
return
482+
}
483+
444484
func (c *TokenAutoUpdateClient) ListConfig(project string, offset, size int) (cfgNames []string, total int, err error) {
445485
for i := 0; i < c.maxTryTimes; i++ {
446486
cfgNames, total, err = c.logClient.ListConfig(project, offset, size)

0 commit comments

Comments
 (0)