Skip to content

Commit c1f779f

Browse files
authored
Merge pull request #3 from zianazhao/dev/gaap
Dev/gaap
2 parents a1860c5 + a8e1953 commit c1f779f

File tree

7 files changed

+209
-25
lines changed

7 files changed

+209
-25
lines changed

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.528 h1:ECUV
237237
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.528/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
238238
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.531 h1:E8vq0WQBjB3jjtCK3u5DPrWGqlgyQUvQ19EkgBob1A8=
239239
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.531/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
240+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.534 h1:ZsJCXIZO2KfmEsrVN6a75VncTuaSkD4PNd1iXZ1I8BU=
241+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.534/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
240242
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334 h1:ulfSODMy8rpKa8MfnTIPbe5HyOArnlB4RJ1qmpj09to=
241243
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334/go.mod h1:AqyM/ZZMD7q5mHBqNY9YImbSpEpoEe7E/vrTbUWX+po=
242244
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.413 h1:MomwSkFrSLB16s51Yu1h4JO+p3Pzc1yesIj+oNwAVM0=
@@ -253,6 +255,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.334 h1:oXOMQ2Em
253255
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.334/go.mod h1:UegCt4vv9jAlzpgDu31ZJTuRP5T2BTV8w+jZBTsZIzg=
254256
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.528 h1:CS8HIQNpfYQogrPR/WEFdVNJX6GIOwDyBzn1IHMb46g=
255257
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.528/go.mod h1:J+xFyeGmSCp0x4tXPu5mlAhg2BAYQPIy3fQ4afy26tI=
258+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.534 h1:E/ccMQB7Il/U6Da5jrS4YUxpEZhVatageVdny+xAoMk=
259+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.534/go.mod h1:MNvt4sQeoetKfp8y3Y1iKv4aR+P7Z5khZX5QXG31ULA=
256260
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod h1:yrBKWhChnDqNz1xuXdSbWXG56XawEq0G5j1lg4VwBD4=
257261
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.334 h1:druwbDkTAvVwEGW4nHVuTuOX0bjk1CtLUDiC3r4gmgY=
258262
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.334/go.mod h1:r8txjlw4DjLDZFOpnPC/hOFHr1VckZc0jjBK6XIFLP0=

pkg/collector/handler_dts.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ func NewDTSHandler(cred common.CredentialIface, c *TcProductCollector, logger lo
206206
return nil, err
207207
}
208208
relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute))
209-
migrateInfosRepoCahe := instance.NewTcDtsInstanceMigrateInfosCache(migrateInfosRepo, relodInterval, logger)
209+
migrateInfosRepoCache := instance.NewTcDtsInstanceMigrateInfosCache(migrateInfosRepo, relodInterval, logger)
210210

211211
replicationRepo, err := instance.NewDtsTcInstanceReplicationsRepository(cred, c.Conf, logger)
212212
if err != nil {
@@ -220,7 +220,7 @@ func NewDTSHandler(cred common.CredentialIface, c *TcProductCollector, logger lo
220220
collector: c,
221221
logger: logger,
222222
},
223-
migrateInfosRepo: migrateInfosRepoCahe,
223+
migrateInfosRepo: migrateInfosRepoCache,
224224
replicationRepo: replicationRepoCache,
225225
}
226226
return

pkg/collector/handler_qaap.go

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import (
44
"fmt"
55
"github.com/go-kit/log"
66
"github.com/go-kit/log/level"
7-
sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529"
87
"github.com/tencentyun/tencentcloud-exporter/pkg/common"
98
"github.com/tencentyun/tencentcloud-exporter/pkg/instance"
109
"github.com/tencentyun/tencentcloud-exporter/pkg/metric"
1110
"github.com/tencentyun/tencentcloud-exporter/pkg/util"
11+
"time"
1212
)
1313

1414
const (
@@ -22,6 +22,8 @@ func init() {
2222

2323
type QaapHandler struct {
2424
baseProductHandler
25+
tcpListenersRepo instance.QaapTcInstanceTCPListenersRepository
26+
udpListenersRepo instance.QaapTcInstanceUDPListenersRepository
2527
}
2628

2729
func (h *QaapHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool {
@@ -160,18 +162,36 @@ func (h *QaapHandler) getInstanceSeries(m *metric.TcmMetric, ins instance.TcInst
160162

161163
func (h *QaapHandler) getListenerIdSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
162164
var series []*metric.TcmSeries
163-
meta, ok := ins.GetMeta().(*sdk.ProxyDetail)
164-
if !ok {
165-
return nil, fmt.Errorf("get instacne raw meta fail, metric=%s, instacne=%s",
166-
m.Meta.MetricName, ins.GetInstanceId())
165+
tcpListenersInfos, err := h.tcpListenersRepo.GetTCPListenersInfo(ins.GetInstanceId())
166+
if err != nil {
167+
return nil, err
167168
}
168-
for _, l4ListenerSet := range meta.L4ListenerSet {
169-
for _, rsSet := range l4ListenerSet.RsSet {
169+
for _, tcpListenersInfo := range tcpListenersInfos.Response.ListenerSet {
170+
for _, realServerSet := range tcpListenersInfo.RealServerSet {
170171
ql := map[string]string{
171172
h.monitorQueryKey: ins.GetMonitorQueryKey(),
172-
"listenerId": *l4ListenerSet.ListenerId,
173-
"originServerInfo": *rsSet.RsInfo,
174-
"protocol": *l4ListenerSet.Protocol,
173+
"listenerId": *tcpListenersInfo.ListenerId,
174+
"originServerInfo": *realServerSet.RealServerIP,
175+
"protocol": *tcpListenersInfo.Protocol,
176+
}
177+
s, err := metric.NewTcmSeries(m, ql, ins)
178+
if err != nil {
179+
return nil, err
180+
}
181+
series = append(series, s)
182+
}
183+
}
184+
udpListenersInfos, err := h.udpListenersRepo.GetUDPListenersInfo(ins.GetInstanceId())
185+
if err != nil {
186+
return nil, err
187+
}
188+
for _, udpListenersInfo := range udpListenersInfos.Response.ListenerSet {
189+
for _, realServerSet := range udpListenersInfo.RealServerSet {
190+
ql := map[string]string{
191+
h.monitorQueryKey: ins.GetMonitorQueryKey(),
192+
"listenerId": *udpListenersInfo.ListenerId,
193+
"originServerInfo": *realServerSet.RealServerIP,
194+
"protocol": *udpListenersInfo.Protocol,
175195
}
176196
s, err := metric.NewTcmSeries(m, ql, ins)
177197
if err != nil {
@@ -184,12 +204,27 @@ func (h *QaapHandler) getListenerIdSeries(m *metric.TcmMetric, ins instance.TcIn
184204
}
185205

186206
func NewQaapHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) {
207+
tcpListenersRepo, err := instance.NewQaapTcInstanceTCPListenersRepository(cred, c.Conf, logger)
208+
if err != nil {
209+
return nil, err
210+
}
211+
relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute))
212+
tcpListenersRepoCache := instance.NewTcGaapInstanceeTCPListenersCache(tcpListenersRepo, relodInterval, logger)
213+
214+
udpListenersRepo, err := instance.NewQaapTcInstanceUDPListenersRepository(cred, c.Conf, logger)
215+
if err != nil {
216+
return nil, err
217+
}
218+
udpListenersRepoCache := instance.NewTcGaapInstanceeUDPListenersCache(udpListenersRepo, relodInterval, logger)
219+
187220
handler = &QaapHandler{
188-
baseProductHandler{
221+
baseProductHandler: baseProductHandler{
189222
monitorQueryKey: QaapInstanceidKey,
190223
collector: c,
191224
logger: logger,
192225
},
226+
tcpListenersRepo: tcpListenersRepoCache,
227+
udpListenersRepo: udpListenersRepoCache,
193228
}
194229
return
195230

pkg/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ var (
7777
}
7878
)
7979

80-
var QcloudNamespace = []string{"COS", "CDN"}
80+
var QcloudNamespace = []string{"COS", "CDN", "QAAP"}
8181

8282
type TencentCredential struct {
8383
AccessKey string `yaml:"access_key"`

pkg/instance/cache.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/go-kit/log"
1010
"github.com/go-kit/log/level"
1111
dtsNew "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts/v20211206"
12+
gaap "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529"
1213
sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412"
1314
tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217"
1415
tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207"
@@ -525,3 +526,84 @@ func NewVbcTcInstanceDRegionRepositoryCache(repo VbcTcInstanceDRegionRepository,
525526
}
526527
return cache
527528
}
529+
530+
// gaap
531+
type TcGaapInstanceeTCPListenersCache struct {
532+
Raw QaapTcInstanceTCPListenersRepository
533+
cache map[string]*gaap.DescribeTCPListenersResponse
534+
lastReloadTime map[string]time.Time
535+
reloadInterval time.Duration
536+
mu sync.Mutex
537+
538+
logger log.Logger
539+
}
540+
541+
func (c *TcGaapInstanceeTCPListenersCache) GetTCPListenersInfo(instanceId string) (*gaap.DescribeTCPListenersResponse, error) {
542+
lrtime, exists := c.lastReloadTime[instanceId]
543+
if exists && time.Now().Sub(lrtime) < c.reloadInterval {
544+
namespace, ok := c.cache[instanceId]
545+
if ok {
546+
return namespace, nil
547+
}
548+
}
549+
550+
tcpListeners, err := c.Raw.GetTCPListenersInfo(instanceId)
551+
if err != nil {
552+
return nil, err
553+
}
554+
c.cache[instanceId] = tcpListeners
555+
c.lastReloadTime[instanceId] = time.Now()
556+
level.Debug(c.logger).Log("msg", "Get gaap Namespaces info from api", "instanceId", instanceId)
557+
return tcpListeners, nil
558+
}
559+
560+
func NewTcGaapInstanceeTCPListenersCache(repo QaapTcInstanceTCPListenersRepository, reloadInterval time.Duration, logger log.Logger) QaapTcInstanceTCPListenersRepository {
561+
cache := &TcGaapInstanceeTCPListenersCache{
562+
Raw: repo,
563+
cache: map[string]*gaap.DescribeTCPListenersResponse{},
564+
lastReloadTime: map[string]time.Time{},
565+
reloadInterval: reloadInterval,
566+
logger: logger,
567+
}
568+
return cache
569+
}
570+
571+
type TcGaapInstanceeUDPListenersCache struct {
572+
Raw QaapTcInstanceUDPListenersRepository
573+
cache map[string]*gaap.DescribeUDPListenersResponse
574+
lastReloadTime map[string]time.Time
575+
reloadInterval time.Duration
576+
mu sync.Mutex
577+
578+
logger log.Logger
579+
}
580+
581+
func (c *TcGaapInstanceeUDPListenersCache) GetUDPListenersInfo(instanceId string) (*gaap.DescribeUDPListenersResponse, error) {
582+
lrtime, exists := c.lastReloadTime[instanceId]
583+
if exists && time.Now().Sub(lrtime) < c.reloadInterval {
584+
namespace, ok := c.cache[instanceId]
585+
if ok {
586+
return namespace, nil
587+
}
588+
}
589+
590+
tcpListeners, err := c.Raw.GetUDPListenersInfo(instanceId)
591+
if err != nil {
592+
return nil, err
593+
}
594+
c.cache[instanceId] = tcpListeners
595+
c.lastReloadTime[instanceId] = time.Now()
596+
level.Debug(c.logger).Log("msg", "Get gaap Namespaces info from api", "instanceId", instanceId)
597+
return tcpListeners, nil
598+
}
599+
600+
func NewTcGaapInstanceeUDPListenersCache(repo QaapTcInstanceUDPListenersRepository, reloadInterval time.Duration, logger log.Logger) QaapTcInstanceUDPListenersRepository {
601+
cache := &TcGaapInstanceeUDPListenersCache{
602+
Raw: repo,
603+
cache: map[string]*gaap.DescribeUDPListenersResponse{},
604+
lastReloadTime: map[string]time.Time{},
605+
reloadInterval: reloadInterval,
606+
logger: logger,
607+
}
608+
return cache
609+
}

pkg/instance/instance_qaap.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,14 @@ import (
99

1010
type QaapTcInstance struct {
1111
baseTcInstance
12-
meta *sdk.ProxyDetail
13-
// listenerMeta *sdk.ProxyDetail
14-
// originServerMeta *sdk.ProxyDetail
12+
meta *sdk.ProxyInfo
1513
}
1614

1715
func (ins *QaapTcInstance) GetMeta() interface{} {
1816
return ins.meta
1917
}
2018

21-
func NewQaapTcInstance(instanceId string, meta *sdk.ProxyDetail) (ins *QaapTcInstance, err error) {
19+
func NewQaapTcInstance(instanceId string, meta *sdk.ProxyInfo) (ins *QaapTcInstance, err error) {
2220
if instanceId == "" {
2321
return nil, fmt.Errorf("instanceId is empty ")
2422
}

pkg/instance/repository_qaap.go

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/go-kit/log/level"
77
sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529"
88

9+
selfcommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
910
"github.com/tencentyun/tencentcloud-exporter/pkg/client"
1011
"github.com/tencentyun/tencentcloud-exporter/pkg/common"
1112
"github.com/tencentyun/tencentcloud-exporter/pkg/config"
@@ -25,9 +26,9 @@ func (repo *QaapTcInstanceRepository) GetInstanceKey() string {
2526
}
2627

2728
func (repo *QaapTcInstanceRepository) Get(id string) (instance TcInstance, err error) {
28-
req := sdk.NewDescribeProxyInstancesRequest()
29+
req := sdk.NewDescribeProxiesRequest()
2930
req.ProxyIds = []*string{&id}
30-
resp, err := repo.client.DescribeProxyInstances(req)
31+
resp, err := repo.client.DescribeProxies(req)
3132
if err != nil {
3233
return
3334
}
@@ -47,16 +48,16 @@ func (repo *QaapTcInstanceRepository) ListByIds(id []string) (instances []TcInst
4748
}
4849

4950
func (repo *QaapTcInstanceRepository) ListByFilters(filters map[string]string) (instances []TcInstance, err error) {
50-
req := sdk.NewDescribeProxyInstancesRequest()
51-
var offset int64 = 0
52-
var limit int64 = 100
51+
req := sdk.NewDescribeProxiesRequest()
52+
var offset uint64 = 0
53+
var limit uint64 = 100
5354
var total int64 = -1
5455

5556
req.Offset = &offset
5657
req.Limit = &limit
5758

5859
getMoreInstances:
59-
resp, err := repo.client.DescribeProxyInstances(req)
60+
resp, err := repo.client.DescribeProxies(req)
6061
if err != nil {
6162
return
6263
}
@@ -72,7 +73,7 @@ getMoreInstances:
7273
instances = append(instances, ins)
7374
}
7475
offset += limit
75-
if offset < total {
76+
if int64(offset) < total {
7677
req.Offset = &offset
7778
goto getMoreInstances
7879
}
@@ -91,3 +92,67 @@ func NewQaapTcInstanceRepository(cred common.CredentialIface, c *config.TencentC
9192
}
9293
return
9394
}
95+
96+
// TCPListeners
97+
type QaapTcInstanceTCPListenersRepository interface {
98+
GetTCPListenersInfo(instanceId string) (*sdk.DescribeTCPListenersResponse, error)
99+
}
100+
101+
type QaapTcInstanceTCPListenersRepositoryImpl struct {
102+
client *sdk.Client
103+
logger log.Logger
104+
}
105+
106+
func (repo *QaapTcInstanceTCPListenersRepositoryImpl) GetTCPListenersInfo(instanceId string) (*sdk.DescribeTCPListenersResponse, error) {
107+
req := sdk.NewDescribeTCPListenersRequest()
108+
var offset uint64 = 0
109+
var limit uint64 = 100
110+
req.Limit = &limit
111+
req.Offset = &offset
112+
req.ProxyId = selfcommon.StringPtr(instanceId)
113+
return repo.client.DescribeTCPListeners(req)
114+
}
115+
116+
func NewQaapTcInstanceTCPListenersRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (QaapTcInstanceTCPListenersRepository, error) {
117+
cli, err := client.NewGAAPClient(cred, c)
118+
if err != nil {
119+
return nil, err
120+
}
121+
repo := &QaapTcInstanceTCPListenersRepositoryImpl{
122+
client: cli,
123+
logger: logger,
124+
}
125+
return repo, nil
126+
}
127+
128+
// UDPListeners
129+
type QaapTcInstanceUDPListenersRepository interface {
130+
GetUDPListenersInfo(instanceId string) (*sdk.DescribeUDPListenersResponse, error)
131+
}
132+
133+
type QaapTcInstanceUDPListenersRepositoryImpl struct {
134+
client *sdk.Client
135+
logger log.Logger
136+
}
137+
138+
func (repo *QaapTcInstanceUDPListenersRepositoryImpl) GetUDPListenersInfo(instanceId string) (*sdk.DescribeUDPListenersResponse, error) {
139+
req := sdk.NewDescribeUDPListenersRequest()
140+
var offset uint64 = 0
141+
var limit uint64 = 100
142+
req.Limit = &limit
143+
req.Offset = &offset
144+
req.ProxyId = selfcommon.StringPtr(instanceId)
145+
return repo.client.DescribeUDPListeners(req)
146+
}
147+
148+
func NewQaapTcInstanceUDPListenersRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (QaapTcInstanceUDPListenersRepository, error) {
149+
cli, err := client.NewGAAPClient(cred, c)
150+
if err != nil {
151+
return nil, err
152+
}
153+
repo := &QaapTcInstanceUDPListenersRepositoryImpl{
154+
client: cli,
155+
logger: logger,
156+
}
157+
return repo, nil
158+
}

0 commit comments

Comments
 (0)