-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathsync_producer_client.go
More file actions
107 lines (100 loc) · 2.6 KB
/
Copy pathsync_producer_client.go
File metadata and controls
107 lines (100 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package tencentcloud_cls_sdk_go
import (
"context"
"errors"
)
// SyncProducerClient synchronized producer client
type SyncProducerClient struct {
config *SyncProducerClientConfig
client *CLSClient
source string
}
// NewSyncProducerClient new sync producer client
func NewSyncProducerClient(config *SyncProducerClientConfig) (*SyncProducerClient, error) {
c := new(SyncProducerClient)
c.validateConfig(config)
c.config = config
client, err := NewCLSClient(&Options{
Host: config.Endpoint,
Credentials: Credentials{
SecretID: config.AccessKeyID,
SecretKEY: config.AccessKeySecret,
SecretToken: config.AccessToken,
Uin: config.Uin,
},
Timeout: config.Timeout,
IdleConn: config.IdleConn,
CompressType: config.CompressType,
})
if err != nil {
return nil, err
}
c.client = client
return c, nil
}
// validateConfig validate config parameters
func (c *SyncProducerClient) validateConfig(config *SyncProducerClientConfig) {
if config.Timeout <= 0 {
config.Timeout = 10000
}
if config.IdleConn <= 0 {
config.IdleConn = 50
}
if config.NeedSource {
c.source, _ = GetLocalIP()
}
}
// SendLogGroupList send batched logs to cls
func (c *SyncProducerClient) SendLogGroupList(ctx context.Context, topicID string, logGroupList []*LogGroup) error {
totalSize := 0
for _, logGroup := range logGroupList {
size, err := GetLogListSize(logGroup.GetLogs())
if err != nil {
return err
}
totalSize += size
if totalSize > 5242880 || len(logGroup.GetLogs()) > 10000 {
return errors.New("logs must be less than 5M and 10000 lines")
}
if c.config.NeedSource {
logGroup.Source = &c.source
}
}
clsErr := c.client.Send(ctx, topicID, logGroupList...)
if clsErr != nil {
return clsErr
}
return nil
}
// SendLogList send batched logs to cls
func (c *SyncProducerClient) SendLogList(ctx context.Context, topicID string, logList []*Log) error {
size, err := GetLogListSize(logList)
if err != nil {
return err
}
if size > 5242880 || len(logList) > 10000 {
return errors.New("logs must be less than 5M and 10000 lines")
}
logGroup := &LogGroup{
Logs: logList,
}
if c.config.NeedSource {
logGroup.Source = &c.source
}
if len(c.config.HostName) > 0 {
logGroup.Hostname = &c.config.HostName
}
clsErr := c.client.Send(ctx, topicID, logGroup)
if clsErr != nil {
return clsErr
}
return nil
}
// ResetSecretToken reset temporary secret info
func (c *SyncProducerClient) ResetSecretToken(secretID string, secretKEY string, secretToken string) error {
err := c.client.ResetSecretToken(secretID, secretKEY, secretToken)
if err != nil {
return err
}
return nil
}