Skip to content

Commit cf92838

Browse files
authored
feat: 支持 metricStore v2 (#367)
1 parent eae5ca6 commit cf92838

7 files changed

Lines changed: 249 additions & 13 deletions

client_interface.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,30 @@ type ClientInterface interface {
153153

154154
// #################### MetricStore Operations #####################
155155
// CreateMetricStore creates a new metric store in SLS.
156+
//
157+
// Deprecated: use CreateMetricStoreV2 instead.
156158
CreateMetricStore(project string, metricStore *LogStore) error
157159
// UpdateMetricStore updates a metric store.
160+
//
161+
// Deprecated: use UpdateMetricStoreV2 instead.
158162
UpdateMetricStore(project string, metricStore *LogStore) error
159163
// DeleteMetricStore deletes a metric store.
164+
//
165+
// Deprecated: use DeleteMetricStoreV2 instead.
160166
DeleteMetricStore(project, name string) error
161167
// GetMetricStore return a metric store.
168+
//
169+
// Deprecated: use GetMetricStoreV2 instead.
162170
GetMetricStore(project, name string) (*LogStore, error)
171+
// CreateMetricStoreV2 creates a new metric store in SLS.
172+
CreateMetricStoreV2(project string, metricStore *MetricStore) error
173+
// UpdateMetricStoreV2 updates a metric store.
174+
UpdateMetricStoreV2(project string, metricStore *MetricStore) error
175+
// DeleteMetricStoreV2 deletes a metric store.
176+
DeleteMetricStoreV2(project, name string) error
177+
// GetMetricStoreV2 return a metric store.
178+
GetMetricStoreV2(project, name string) (*MetricStore, error)
179+
163180
// GetMetricStoreMeteringMode get the metering mode of metric store, eg. ChargeByFunction / ChargeByDataIngest
164181
GetMetricStoreMeteringMode(project string, metricStore string) (*GetMeteringModeResponse, error)
165182
// UpdateMetricStoreMeteringMode update the metering mode of metric store, eg. ChargeByFunction / ChargeByDataIngest

client_metric_store.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package sls
33
import "time"
44

55
// CreateMetricStore .
6+
//
7+
// Deprecated: use CreateMetricStoreV2 instead.
68
func (c *Client) CreateMetricStore(project string, metricStore *LogStore) error {
79
metricStore.TelemetryType = "Metrics"
810
err := c.CreateLogStoreV2(project, metricStore)
@@ -35,6 +37,8 @@ func (c *Client) CreateMetricStore(project string, metricStore *LogStore) error
3537
}
3638

3739
// UpdateMetricStore .
40+
//
41+
// Deprecated: use UpdateMetricStoreV2 instead.
3842
func (c *Client) UpdateMetricStore(project string, metricStore *LogStore) error {
3943
metricStore.TelemetryType = "Metrics"
4044
err := c.UpdateLogStoreV2(project, metricStore)
@@ -45,15 +49,43 @@ func (c *Client) UpdateMetricStore(project string, metricStore *LogStore) error
4549
}
4650

4751
// DeleteMetricStore .
52+
//
53+
// Deprecated: use DeleteMetricStoreV2 instead.
4854
func (c *Client) DeleteMetricStore(project, name string) error {
4955
return c.DeleteLogStore(project, name)
5056
}
5157

5258
// GetMetricStore .
59+
//
60+
// Deprecated: use GetMetricStoreV2 instead.
5361
func (c *Client) GetMetricStore(project, name string) (*LogStore, error) {
5462
return c.GetLogStore(project, name)
5563
}
5664

65+
// CreateMetricStoreV2 creates a new metric store in SLS.
66+
func (c *Client) CreateMetricStoreV2(project string, metricStore *MetricStore) error {
67+
proj := convert(c, project)
68+
return proj.CreateMetricStoreV2(metricStore)
69+
}
70+
71+
// UpdateMetricStoreV2 updates a metric store.
72+
func (c *Client) UpdateMetricStoreV2(project string, metricStore *MetricStore) error {
73+
proj := convert(c, project)
74+
return proj.UpdateMetricStoreV2(metricStore)
75+
}
76+
77+
// DeleteMetricStoreV2 deletes a metric store.
78+
func (c *Client) DeleteMetricStoreV2(project, name string) error {
79+
proj := convert(c, project)
80+
return proj.DeleteMetricStoreV2(name)
81+
}
82+
83+
// GetMetricStoreV2 returns a metric store.
84+
func (c *Client) GetMetricStoreV2(project, name string) (*MetricStore, error) {
85+
proj := convert(c, project)
86+
return proj.GetMetricStoreV2(name)
87+
}
88+
5789
// GetMetricStoreMeteringMode get the metering mode of metric store, eg. ChargeByFunction / ChargeByDataIngest
5890
func (c *Client) GetMetricStoreMeteringMode(project string, metricStore string) (*GetMeteringModeResponse, error) {
5991
ms := convertLogstore(c, project, metricStore)

client_metric_store_test.go

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package sls
22

33
import (
44
"fmt"
5-
"github.com/stretchr/testify/suite"
65
"os"
76
"testing"
87
"time"
8+
9+
"github.com/stretchr/testify/suite"
910
)
1011

1112
func TestMetricStore(t *testing.T) {
@@ -49,40 +50,62 @@ func (m *MetricStoreTestSuite) TearDownSuite() {
4950
}
5051

5152
func (m *MetricStoreTestSuite) TestClient_CreateAndDeleteMetricStore() {
52-
metricStore := &LogStore{
53+
metricStore := &MetricStore{
5354
Name: m.metricStoreName,
5455
TTL: m.ttl,
5556
ShardCount: m.shardCnt,
5657
}
57-
ce := m.client.CreateMetricStore(m.projectName, metricStore)
58+
ce := m.client.CreateMetricStoreV2(m.projectName, metricStore)
5859
m.Require().Nil(ce)
59-
de := m.client.DeleteMetricStore(m.projectName, m.metricStoreName)
60+
de := m.client.DeleteMetricStoreV2(m.projectName, m.metricStoreName)
6061
m.Require().Nil(de)
6162
}
6263

6364
func (m *MetricStoreTestSuite) TestClient_UpdateAndGetMetricStore() {
64-
metricStore1 := &LogStore{
65+
metricStore1 := &MetricStore{
6566
Name: m.metricStoreName,
6667
TTL: m.ttl,
6768
ShardCount: m.shardCnt,
6869
}
69-
ce := m.client.CreateMetricStore(m.projectName, metricStore1)
70+
ce := m.client.CreateMetricStoreV2(m.projectName, metricStore1)
7071
m.Require().Nil(ce)
71-
metricStore, ge := m.client.GetMetricStore(m.projectName, m.metricStoreName)
72+
metricStore, ge := m.client.GetMetricStoreV2(m.projectName, m.metricStoreName)
7273
m.Require().Nil(ge)
7374
m.Require().Equal(m.metricStoreName, metricStore.Name)
7475
m.Require().Equal(m.ttl, metricStore.TTL)
7576
m.Require().Equal(m.shardCnt, metricStore.ShardCount)
76-
m.Require().Equal("Metrics", metricStore.TelemetryType)
7777

7878
metricStore1.TTL = 15
79-
ue := m.client.UpdateMetricStore(m.projectName, metricStore1)
79+
ue := m.client.UpdateMetricStoreV2(m.projectName, metricStore1)
8080
m.Require().Nil(ue)
81-
metricStore2, ge2 := m.client.GetMetricStore(m.projectName, m.metricStoreName)
81+
metricStore2, ge2 := m.client.GetMetricStoreV2(m.projectName, m.metricStoreName)
8282
m.Require().Nil(ge2)
8383
m.Require().Equal(m.metricStoreName, metricStore2.Name)
8484
m.Require().Equal(15, metricStore2.TTL)
85-
m.Require().Equal("Metrics", metricStore.TelemetryType)
86-
de := m.client.DeleteMetricStore(m.projectName, m.metricStoreName)
85+
de := m.client.DeleteMetricStoreV2(m.projectName, m.metricStoreName)
8786
m.Require().Nil(de)
8887
}
88+
89+
func TestClient_MetricStoreMeteringMode(t *testing.T) {
90+
client := CreateNormalInterface(os.Getenv("LOG_TEST_ENDPOINT"), os.Getenv("LOG_TEST_ACCESS_KEY_ID"), os.Getenv("LOG_TEST_ACCESS_KEY_SECRET"), "")
91+
projectName := os.Getenv("LOG_TEST_PROJECT_NAME")
92+
metricStoreName := os.Getenv("LOG_TEST_METRIC_STORE_NAME")
93+
// 获取初始计量模式
94+
res, err := client.GetMetricStoreMeteringMode(projectName, metricStoreName)
95+
if err != nil {
96+
t.Fatalf("获取计量模式失败: %v", err)
97+
}
98+
initialMode := res.MeteringMode
99+
fmt.Printf("Initial metering mode: %s\n", initialMode)
100+
101+
// 切换到 ChargeByDataIngest
102+
err = client.UpdateMetricStoreMeteringMode(projectName, metricStoreName, CHARGE_BY_FUNCTION)
103+
if err != nil {
104+
t.Fatalf("更新计量模式失败: %v", err)
105+
}
106+
res, err = client.GetMetricStoreMeteringMode(projectName, metricStoreName)
107+
if err != nil {
108+
t.Fatalf("获取计量模式失败: %v", err)
109+
}
110+
fmt.Printf("Changed to: %s\n", res.MeteringMode)
111+
}

client_store_view_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ func (s *StoreViewTestSuite) createStores() {
244244
LogReduce: false,
245245
})
246246
s.Require().NoError(err)
247-
err = s.client.CreateMetricStore(s.project, &LogStore{
247+
err = s.client.CreateMetricStoreV2(s.project, &MetricStore{
248248
Name: fmt.Sprintf("metricstore-%d", i),
249249
TTL: 7,
250250
ShardCount: 2,

log_project.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,3 +1359,103 @@ func (p *LogProject) parseEndpoint() {
13591359
p.baseURL = fmt.Sprintf("%s%s.%s", scheme, p.Name, host)
13601360
}
13611361
}
1362+
1363+
// CreateMetricStoreV2 creates a new metric store in SLS.
1364+
func (p *LogProject) CreateMetricStoreV2(metricStore *MetricStore) error {
1365+
body, err := json.Marshal(metricStore)
1366+
if err != nil {
1367+
return NewClientError(err)
1368+
}
1369+
1370+
h := map[string]string{
1371+
"x-log-bodyrawsize": fmt.Sprintf("%v", len(body)),
1372+
"Content-Type": "application/json",
1373+
}
1374+
1375+
r, err := request(p, "POST", "/metricstores", h, body)
1376+
if err != nil {
1377+
return NewClientError(err)
1378+
}
1379+
defer r.Body.Close()
1380+
buf, err := ioutil.ReadAll(r.Body)
1381+
if err != nil {
1382+
return readResponseError(err)
1383+
}
1384+
if r.StatusCode != http.StatusOK {
1385+
return httpStatusNotOkError(buf, r.Header, r.StatusCode)
1386+
}
1387+
return nil
1388+
}
1389+
1390+
// UpdateMetricStoreV2 updates a metric store according by name.
1391+
func (p *LogProject) UpdateMetricStoreV2(metricStore *MetricStore) (err error) {
1392+
body, err := json.Marshal(metricStore)
1393+
if err != nil {
1394+
return NewClientError(err)
1395+
}
1396+
1397+
h := map[string]string{
1398+
"x-log-bodyrawsize": fmt.Sprintf("%v", len(body)),
1399+
"Content-Type": "application/json",
1400+
}
1401+
r, err := request(p, "PUT", "/metricstores/"+metricStore.Name, h, body)
1402+
if err != nil {
1403+
return NewClientError(err)
1404+
}
1405+
defer r.Body.Close()
1406+
buf, err := ioutil.ReadAll(r.Body)
1407+
if err != nil {
1408+
return readResponseError(err)
1409+
}
1410+
if r.StatusCode != http.StatusOK {
1411+
return httpStatusNotOkError(buf, r.Header, r.StatusCode)
1412+
}
1413+
return nil
1414+
}
1415+
1416+
// DeleteMetricStoreV2 deletes a metric store according by name.
1417+
func (p *LogProject) DeleteMetricStoreV2(name string) (err error) {
1418+
h := map[string]string{
1419+
"x-log-bodyrawsize": "0",
1420+
}
1421+
1422+
r, err := request(p, "DELETE", "/metricstores/"+name, h, nil)
1423+
if err != nil {
1424+
return NewClientError(err)
1425+
}
1426+
defer r.Body.Close()
1427+
buf, err := ioutil.ReadAll(r.Body)
1428+
if err != nil {
1429+
return readResponseError(err)
1430+
}
1431+
if r.StatusCode != http.StatusOK {
1432+
return httpStatusNotOkError(buf, r.Header, r.StatusCode)
1433+
}
1434+
return nil
1435+
}
1436+
1437+
// GetMetricStoreV2 returns a metric store by name.
1438+
func (p *LogProject) GetMetricStoreV2(name string) (*MetricStore, error) {
1439+
h := map[string]string{
1440+
"x-log-bodyrawsize": "0",
1441+
}
1442+
1443+
r, err := request(p, "GET", "/metricstores/"+name, h, nil)
1444+
if err != nil {
1445+
return nil, NewClientError(err)
1446+
}
1447+
defer r.Body.Close()
1448+
buf, err := ioutil.ReadAll(r.Body)
1449+
if err != nil {
1450+
return nil, readResponseError(err)
1451+
}
1452+
if r.StatusCode != http.StatusOK {
1453+
return nil, httpStatusNotOkError(buf, r.Header, r.StatusCode)
1454+
}
1455+
1456+
store := &MetricStore{}
1457+
if err := json.Unmarshal(buf, store); err != nil {
1458+
return nil, invalidJsonRespError(string(buf), r.Header, r.StatusCode)
1459+
}
1460+
return store, nil
1461+
}

metric_store_v2.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package sls
2+
3+
// MetricStore defines MetricStore struct for /metricstores APIs.
4+
type MetricStore struct {
5+
Name string `json:"name"`
6+
TTL int `json:"ttl"`
7+
ShardCount int `json:"shardCount"`
8+
WebTracking bool `json:"enable_tracking"`
9+
AutoSplit bool `json:"autoSplit"`
10+
MaxSplitShard int `json:"maxSplitShard"`
11+
12+
AppendMeta bool `json:"appendMeta"`
13+
HotTTL int32 `json:"hot_ttl,omitempty"` // 0 means hot_ttl = ttl
14+
InfrequentAccessTTL *int32 `json:"infrequentAccessTTL,omitempty"` // 0 means infrequentAccessTTL = 0
15+
Mode string `json:"mode,omitempty"` // "query" or "standard"(default), can't be modified after creation
16+
17+
CreateTime uint32 `json:"createTime,omitempty"`
18+
LastModifyTime uint32 `json:"lastModifyTime,omitempty"`
19+
}

token_auto_update_client.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1963,6 +1963,8 @@ func (c *TokenAutoUpdateClient) RestartExport(project string, export *Export) (e
19631963
}
19641964
return
19651965
}
1966+
1967+
// Deprecated: use CreateMetricStoreV2 instead.
19661968
func (c *TokenAutoUpdateClient) CreateMetricStore(project string, metricStore *LogStore) (err error) {
19671969
for i := 0; i < c.maxTryTimes; i++ {
19681970
err = c.logClient.CreateMetricStore(project, metricStore)
@@ -1972,6 +1974,8 @@ func (c *TokenAutoUpdateClient) CreateMetricStore(project string, metricStore *L
19721974
}
19731975
return
19741976
}
1977+
1978+
// Deprecated: use UpdateMetricStoreV2 instead.
19751979
func (c *TokenAutoUpdateClient) UpdateMetricStore(project string, metricStore *LogStore) (err error) {
19761980
for i := 0; i < c.maxTryTimes; i++ {
19771981
err = c.logClient.UpdateMetricStore(project, metricStore)
@@ -1981,6 +1985,8 @@ func (c *TokenAutoUpdateClient) UpdateMetricStore(project string, metricStore *L
19811985
}
19821986
return
19831987
}
1988+
1989+
// Deprecated: use DeleteMetricStoreV2 instead.
19841990
func (c *TokenAutoUpdateClient) DeleteMetricStore(project, name string) (err error) {
19851991
for i := 0; i < c.maxTryTimes; i++ {
19861992
err = c.logClient.DeleteMetricStore(project, name)
@@ -1990,6 +1996,8 @@ func (c *TokenAutoUpdateClient) DeleteMetricStore(project, name string) (err err
19901996
}
19911997
return
19921998
}
1999+
2000+
// Deprecated: use GetMetricStoreV2 instead.
19932001
func (c *TokenAutoUpdateClient) GetMetricStore(project, name string) (metricStore *LogStore, err error) {
19942002
for i := 0; i < c.maxTryTimes; i++ {
19952003
metricStore, err = c.logClient.GetMetricStore(project, name)
@@ -2210,3 +2218,40 @@ func (c *TokenAutoUpdateClient) PutLogStoreMultimodalConfiguration(project, logs
22102218
}
22112219
return
22122220
}
2221+
2222+
func (c *TokenAutoUpdateClient) CreateMetricStoreV2(project string, metricStore *MetricStore) (err error) {
2223+
for i := 0; i < c.maxTryTimes; i++ {
2224+
err = c.logClient.CreateMetricStoreV2(project, metricStore)
2225+
if !c.processError(err) {
2226+
return
2227+
}
2228+
}
2229+
return
2230+
}
2231+
func (c *TokenAutoUpdateClient) UpdateMetricStoreV2(project string, metricStore *MetricStore) (err error) {
2232+
for i := 0; i < c.maxTryTimes; i++ {
2233+
err = c.logClient.UpdateMetricStoreV2(project, metricStore)
2234+
if !c.processError(err) {
2235+
return
2236+
}
2237+
}
2238+
return
2239+
}
2240+
func (c *TokenAutoUpdateClient) DeleteMetricStoreV2(project, name string) (err error) {
2241+
for i := 0; i < c.maxTryTimes; i++ {
2242+
err = c.logClient.DeleteMetricStoreV2(project, name)
2243+
if !c.processError(err) {
2244+
return
2245+
}
2246+
}
2247+
return
2248+
}
2249+
func (c *TokenAutoUpdateClient) GetMetricStoreV2(project, name string) (metricStore *MetricStore, err error) {
2250+
for i := 0; i < c.maxTryTimes; i++ {
2251+
metricStore, err = c.logClient.GetMetricStoreV2(project, name)
2252+
if !c.processError(err) {
2253+
return
2254+
}
2255+
}
2256+
return
2257+
}

0 commit comments

Comments
 (0)