diff --git a/.gitignore b/.gitignore index a6cf130..9825be6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ /.idea build/* qcloud.yml -.DS_Store \ No newline at end of file +.DS_Store +*mock.go +/bin \ No newline at end of file diff --git a/README.md b/README.md index 71c5de9..49abf6d 100644 --- a/README.md +++ b/README.md @@ -82,26 +82,27 @@ products: credential: access_key: // 必须, 云API的SecretId access_secret: // 必须, 云API的SecretKey + role: // 可选,可在云上CVM/TKE中使用,没有access_key和access_secret时会使用role申请临时密钥 region: // 必须, 实例所在区域信息 -rate_limit: 15 // 腾讯云监控拉取指标数据限制, 官方默认限制最大20qps +rate_limit: 15 // 腾讯云监控拉取指标数据限制, 官方默认限制最大20qps -// 整个产品纬度配置, 每个产品一个item +// 整个产品纬度配置, 每个产品一个item products: - namespace: QCE/CMONGO // 必须, 产品命名空间; QCE前缀可自定义,CMONGO产品名不区分大小写, 可用别名 - all_metrics: true // 常用, 推荐开启, 导出支持的所有指标 - all_instances: true // 常用, 推荐开启, 导出该region下的所有实例 + all_metrics: true // 常用, 推荐开启, 导出支持的所有指标 + all_instances: true // 常用, 推荐开启, 导出该region下的所有实例 extra_labels: [InstanceName,Zone] // 可选, 将实例的字段作为指标的lables导出 only_include_metrics: [Inserts] // 可选, 只导出这些指标, 配置时all_metrics失效 exclude_metrics: [Reads] // 可选, 不导出这些指标 instance_filters: // 可选, 在all_instances开启情况下, 根据每个实例的字段进行过滤 - ProjectId: 1 - Status: 1 + Status: 1 only_include_instances: [cmgo-xxxxxxxx] // 可选, 只导出这些实例id, 配置时all_instances失效 exclude_instances: [cmgo-xxxxxxxx] // 可选, 不导出这些实例id custom_query_dimensions: // 可选, 不常用, 自定义指标查询条件, 配置时all_instances,only_include_instances,exclude_instances失效, 用于不支持按实例纬度查询的指标 - - target: cmgo-xxxxxxxx + - target: cmgo-xxxxxxxx statistics_types: [avg] // 可选, 拉取N个数据点, 再进行max、min、avg、last计算, 默认last取最新值 period_seconds: 60 // 可选, 指标统计周期, 默认自动获取指标支持的最小统计周期 range_seconds: 300 // 可选, 选取时间范围, 开始时间=now-range_seconds, 结束时间=now @@ -112,33 +113,33 @@ products: // 单个指标纬度配置, 每个指标一个item metrics: - - tc_namespace: QCE/CMONGO // 产品命名空间, 同namespace + - tc_namespace: QCE/CMONGO // 产品命名空间, 同namespace tc_metric_name: Inserts // 云监控定义的指标名 tc_metric_rename: Inserts // 导出指标的显示名 tc_metric_name_type: 1 // 可选,导出指标的名字格式化类型, 1=大写转小写加下划线, 2=转小写; 默认1 tc_labels: [InstanceName] // 可选, 将实例的字段作为指标的lables导出 tc_filters: // 可选, 根据每个实例的字段进行过滤, 否则默认导出region下所有实例 - ProjectId: 1 - Status: 1 + Status: 1 tc_myself_dimensions: // 可选, 同custom_query_dimensions tc_statistics: [Avg] // 可选, 同statistics_types period_seconds: 60 // 可选, 同period_seconds range_seconds: 300 // 可选, 同range_seconds delay_seconds: 60 // 可选, 同delay_seconds - ``` 特殊说明: 1. **custom_query_dimensions** -每个实例的纬度字段信息, 可从对应的云监控产品指标文档查询, 如mongo支持的纬度字段信息可由[云监控指标详情](https://cloud.tencent.com/document/product/248/45104#%E5%90%84%E7%BB%B4%E5%BA%A6%E5%AF%B9%E5%BA%94%E5%8F%82%E6%95%B0%E6%80%BB%E8%A7%88) 查询 + 每个实例的纬度字段信息, 可从对应的云监控产品指标文档查询, 如mongo支持的纬度字段信息可由[云监控指标详情](https://cloud.tencent.com/document/product/248/45104#%E5%90%84%E7%BB%B4%E5%BA%A6%E5%AF%B9%E5%BA%94%E5%8F%82%E6%95%B0%E6%80%BB%E8%A7%88) 查询 2. **extra_labels** -每个导出metric的labels还额外上报实例对应的字段信息, 实例可选的字段列表可从对应产品文档查询, 如mongo实例支持的字段可从[实例查询api文档](https://cloud.tencent.com/document/product/240/38568) 获取, 目前只支持str、int类型的字段 + 每个导出metric的labels还额外上报实例对应的字段信息, 实例可选的字段列表可从对应产品文档查询, 如mongo实例支持的字段可从[实例查询api文档](https://cloud.tencent.com/document/product/240/38568) 获取, 目前只支持str、int类型的字段 3. **period_seconds** -每个指标支持的时间纬度统计, 一般支持60、300秒等, 具体可由对应产品的云监控产品指标文档查询, 如mongo可由[指标元数据查询](https://cloud.tencent.com/document/product/248/30351) , 假如不配置, 使用默认值(60), 假如该指标不支持60, 则自动使用该指标支持的最小值 + 每个指标支持的时间纬度统计, 一般支持60、300秒等, 具体可由对应产品的云监控产品指标文档查询, 如mongo可由[指标元数据查询](https://cloud.tencent.com/document/product/248/30351) , 假如不配置, 使用默认值(60), 假如该指标不支持60, 则自动使用该指标支持的最小值 4. **credential** -SecretId、SecretKey、Region可由环境变量获取 + SecretId、SecretKey、Region可由环境变量获取 ```bash export TENCENTCLOUD_SECRET_ID="YOUR_ACCESS_KEY" export TENCENTCLOUD_SECRET_KEY="YOUR_ACCESS_SECRET" +export TENCENTCLOUD_SERVICE_ROLE = "YOUR_SERVICE_ROLE" export TENCENTCLOUD_REGION="REGION" ``` @@ -156,7 +157,7 @@ export TENCENTCLOUD_REGION="REGION" --log.level|日志级别|info -## 五、qcloud.yml样例 +## 五、qcloud.yml样例 在git的configs里有支持产品的配置模版样例 diff --git a/cmd/qcloud-exporter/qcloud_exporter.go b/cmd/qcloud-exporter/qcloud_exporter.go index d56905a..80c164f 100644 --- a/cmd/qcloud-exporter/qcloud_exporter.go +++ b/cmd/qcloud-exporter/qcloud_exporter.go @@ -4,9 +4,14 @@ import ( "fmt" "net/http" "os" + "time" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/cachedtransactiongather" + + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/common/promlog" @@ -17,7 +22,9 @@ import ( kingpin "gopkg.in/alecthomas/kingpin.v2" ) -func newHandler(c *config.TencentConfig, includeExporterMetrics bool, maxRequests int, logger log.Logger) (*http.Handler, error) { +func newHandler(cred common.CredentialIface, c *config.TencentConfig, + includeExporterMetrics bool, maxRequests int, logger log.Logger) (*http.Handler, error) { + exporterMetricsRegistry := prometheus.NewRegistry() if includeExporterMetrics { exporterMetricsRegistry.MustRegister( @@ -26,7 +33,7 @@ func newHandler(c *config.TencentConfig, includeExporterMetrics bool, maxRequest ) } - nc, err := collector.NewTcMonitorCollector(c, logger) + nc, err := collector.NewTcMonitorCollector(cred, c, logger) if err != nil { return nil, fmt.Errorf("couldn't create collector: %s", err) } @@ -35,15 +42,24 @@ func newHandler(c *config.TencentConfig, includeExporterMetrics bool, maxRequest if err := r.Register(nc); err != nil { return nil, fmt.Errorf("couldn't register tencent cloud monitor collector: %s", err) } + var handler http.Handler + gatherers := prometheus.Gatherers{exporterMetricsRegistry, r} + opts := promhttp.HandlerOpts{ + ErrorHandling: promhttp.ContinueOnError, + MaxRequestsInFlight: maxRequests, + Registry: exporterMetricsRegistry, + } + if c.CacheInterval <= 0 { + handler = promhttp.HandlerFor(gatherers, opts) + } else { + handler = promhttp.HandlerForTransactional( + cachedtransactiongather.NewCachedTransactionGather( + prometheus.ToTransactionalGatherer(gatherers), + time.Duration(c.CacheInterval)*time.Second, logger, + ), opts, + ) + } - handler := promhttp.HandlerFor( - prometheus.Gatherers{exporterMetricsRegistry, r}, - promhttp.HandlerOpts{ - ErrorHandling: promhttp.ContinueOnError, - MaxRequestsInFlight: maxRequests, - Registry: exporterMetricsRegistry, - }, - ) if includeExporterMetrics { handler = promhttp.InstrumentMetricHandler( exporterMetricsRegistry, handler, @@ -94,7 +110,27 @@ func main() { level.Info(logger).Log("msg", "Load config ok") } - handler, err := newHandler(tencentConfig, *enableExporterMetrics, *maxRequests, logger) + cred := &common.Credential{} + if tencentConfig.Credential.Role != "" { + var err error + cred, err = common.NewCredential(tencentConfig.Credential.Role) + if err != nil { + level.Error(logger).Log("msg", "init cred error", "err", err) + panic(err) + } + go func() { + err := cred.Refresh() + if err != nil { + level.Error(logger).Log("msg", "cred refresh error", "err", err) + panic(err) + } + }() + } else { + cred.SecretId = tencentConfig.Credential.AccessKey + cred.SecretKey = tencentConfig.Credential.SecretKey + } + + handler, err := newHandler(cred, tencentConfig, *enableExporterMetrics, *maxRequests, logger) if err != nil { level.Error(logger).Log("msg", "Create handler fail", "err", err) os.Exit(1) diff --git a/go.mod b/go.mod index 23b785e..be60410 100644 --- a/go.mod +++ b/go.mod @@ -3,18 +3,19 @@ module github.com/tencentyun/tencentcloud-exporter go 1.12 require ( - github.com/go-kit/kit v0.9.0 + github.com/go-kit/log v0.2.0 github.com/golang/mock v1.4.4 - github.com/prometheus/client_golang v1.5.1 - github.com/prometheus/common v0.9.1 + github.com/prometheus/client_golang v1.12.2-0.20220630150036-810fcb46abcd + github.com/prometheus/client_model v0.2.0 + github.com/prometheus/common v0.35.0 github.com/stretchr/testify v1.6.1 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.413 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.423 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.437 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq v1.0.334 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.430 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.437 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.413 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.334 @@ -34,6 +35,6 @@ require ( github.com/tencentyun/cos-go-sdk-v5 v0.7.35 golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e gopkg.in/alecthomas/kingpin.v2 v2.2.6 - gopkg.in/yaml.v2 v2.2.5 + gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index fc484db..ac0ab7b 100644 --- a/go.sum +++ b/go.sum @@ -1,48 +1,156 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -57,31 +165,45 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ= github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA= -github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2-0.20220630150036-810fcb46abcd h1:Ha7xTFI6C9vK76j2O/5NYObv91NyCx5FP/OmmC0Mt/I= +github.com/prometheus/client_golang v1.12.2-0.20220630150036-810fcb46abcd/go.mod h1:nDOYPpTKRWyFSHGWY5QbDUvjSMBusROfFzxhmDKUNWo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= +github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE= +github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -89,19 +211,12 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tencentcloud/tencentcloud-sdk-go v1.0.413 h1:6mBQybv/rsrOCnzhifwJnSE7ki2EGfzRKb8+yPIijl8= -github.com/tencentcloud/tencentcloud-sdk-go v1.0.414 h1:1fAd3HgD+emgJBh0+q1SL04PfTZuy7iBfcY4Mvvkd1U= -github.com/tencentcloud/tencentcloud-sdk-go v1.0.427 h1:AY1eqZmNax/PBqmSn5GVKqOSxLF3oJaLNTS5ANIcCrY= -github.com/tencentcloud/tencentcloud-sdk-go v1.0.429 h1:prdy8TCzdpyBctZq0jBFU1VvRs7cqTS1gUf4hCZ0UA4= -github.com/tencentcloud/tencentcloud-sdk-go v1.0.430 h1:jr8NBcOk/avNLLJkU6iPGdP2X+izenwSkp5uX+P1wy8= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.334 h1:GijOjoDBcWXtra6hmzpj4IXOahWmsTE3bwpOcp5VBDw= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.334/go.mod h1:PTp058qpOV//RukBVdYQT962rZg71lIt6eHLK1zdvEc= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.334 h1:1NDpg/jeMASV09JFLMe7yU53QA9gY55H4X1j39JZ78w= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.334/go.mod h1:BMLd7J4LnIxw3fSl9vo3UCudJbH1wZutP8Uo3sQGQTk= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.413 h1:6cQPfHc3I1pKUj23csRd9P/xxUPcnGRLRK2e5NGqtzc= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.413/go.mod h1:TEuicyMWitW1zPkLbknGYg+VBGNE5N7GckvCF+hurWo= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.423 h1:MPJZWpBsOepykukmQD6GWIuv4uOy6JqEbPc8+G/rdGQ= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.423/go.mod h1:tfvvxesOH0nCkIvWC53uVjzM4bEShcI8jBUE5FONAec= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.437 h1:siozcBuF+BM1j2+nTAUMap7rUNJrBgFvxS8pM8TqY/M= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.437/go.mod h1:NSx2qKvoTWBKc1hBp5oUNwbbR3tzdBuTqfnAmb71KBo= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.334 h1:LOXFeP3NHL/0PFFXA2GhYH/i7rDbcBwhcJJvqRdFO/w= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.334/go.mod h1:toYhD7pJDpz6XY3cf/zhUXtKDRt1CbLkgmOidQ2j8kA= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.334 h1:NeYNgw78v+qhxWbROjHaazaeEWigt6xTvg7CUS1dt6g= @@ -109,16 +224,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.334/go.mod h1: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq v1.0.334 h1:NlMAh8vTnQdXzRSA0DTZ+KZ+/ZM2/UPIFUUNFIiDfbg= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq v1.0.334/go.mod h1:lMGRATy+K7bKhXtxNTqRbSmaCy48xSQXPJqc1tYV50k= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.194/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.334 h1:tNkXg+cTnESAX6EmQWfF05NsYfD7U8qKtk/3YbWOCKk= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.334/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.413 h1:DvydszksqriOr0Zze9OREt8OrIrtMSFcVD8lz3xNAQA= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.413/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.423 h1:3Tv9gpsf9YuaNsbAE2ybDjrRrQqG3PiBOq/HoOJxSZY= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.423/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.429 h1:9c+9TDjfAjIYLQQtr1FV6qeYyNfTz1O0vFmQHbT4vYY= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.429/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.430 h1:mGlGWepu+R50WZX9YwNs0VaoSLOTEr323rjiRfiD1fE= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.430/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.437 h1:Qa0q6mhOkQ/0RoAqOheJAzPFksAf3jsjOZVt4FGcvyQ= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.437/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334 h1:ulfSODMy8rpKa8MfnTIPbe5HyOArnlB4RJ1qmpj09to= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334/go.mod h1:AqyM/ZZMD7q5mHBqNY9YImbSpEpoEe7E/vrTbUWX+po= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.413 h1:MomwSkFrSLB16s51Yu1h4JO+p3Pzc1yesIj+oNwAVM0= @@ -148,46 +257,302 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.334 h1:d github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.334/go.mod h1:ySz4zbciCFruAviNMeBcu7wW2+BY9Maw8qGWawTywkM= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq v1.0.413 h1:nNYCih7UReD8/l97egLhlVsC6r48MYYEvVgQfllqGwc= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq v1.0.413/go.mod h1:rMQYgt5anP1/ME1c+0Apo1W9250pbEn5oQ+cNMAo1U0= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.413 h1:CniS5OHzPsajRc5cWqJ9X62QKm9mbdTv9yhp5qY7uSs= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.413/go.mod h1:6ZY4UsmCp2fvcLsahzBtSeLOc0IXxCHrPDmccBaOpJs= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.429 h1:bEN8pkNwpc2kbsxIxeXtPVSWG9JNPNBKChg+xUbbqmM= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.429/go.mod h1:ID5dRwzba+NlOYHEoo9F8A+eDeQohJ8LoLCP3OzO4uo= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.430 h1:Brvrm1ZzBcS1q1XXpPx//zlVIbUZ4+cryrMYYHFGn3g= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.430/go.mod h1:rJoqfhS+Y0GmdZuS/N4bFXfDJeh/N59W6hojoTRQ6v0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.334 h1:rcM2H2e8kqxv7pZcsBdaIMitNd65+3iTM8aK/q6LS7U= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.334/go.mod h1:SKgeSsIfPEM6BeoIFiGHsWG9UsEXzkK0SkWx51H/OS8= github.com/tencentyun/cos-go-sdk-v5 v0.7.35 h1:XVk5GQ4eH1q+DBUJfpaMMdU9TJZWMjwNNwv0PG5nbLQ= github.com/tencentyun/cos-go-sdk-v5 v0.7.35/go.mod h1:4dCEtLHGh8QPxHEkgq+nFaky7yZxQuYwgSJM87icDaw= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/cachedtransactiongather/cachedtransactiongather.go b/pkg/cachedtransactiongather/cachedtransactiongather.go new file mode 100644 index 0000000..7938c38 --- /dev/null +++ b/pkg/cachedtransactiongather/cachedtransactiongather.go @@ -0,0 +1,70 @@ +package cachedtransactiongather + +import ( + "sync" + "time" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/prometheus/client_golang/prometheus" + io_prometheus_client "github.com/prometheus/client_model/go" +) + +// NewCachedTransactionGather creates cachedTransactionGather, which only allow one request per interval, and pending others +// until response +func NewCachedTransactionGather( + gather prometheus.TransactionalGatherer, + cacheInterval time.Duration, + logger log.Logger, +) prometheus.TransactionalGatherer { + return &cachedTransactionGather{ + gather: gather, + nextCollectionTime: time.Now(), + cacheInterval: cacheInterval, + logger: logger, + } +} + +type cachedTransactionGather struct { + gather prometheus.TransactionalGatherer + + cache []*io_prometheus_client.MetricFamily + err error + + nextCollectionTime time.Time + cacheInterval time.Duration + + lock sync.RWMutex + + logger log.Logger +} + +func (c *cachedTransactionGather) Gather() ([]*io_prometheus_client.MetricFamily, func(), error) { + c.lock.RLock() + shouldGather := time.Now().After(c.nextCollectionTime) + c.lock.RUnlock() + if shouldGather { + begin := time.Now() + c.lock.Lock() + c.nextCollectionTime = c.nextCollectionTime.Add(c.cacheInterval) + metrics, done, err := c.gather.Gather() + if err != nil { + c.err = err + c.cache = []*io_prometheus_client.MetricFamily{} + done() + } else { + c.cache = metrics + c.err = nil + done() + } + c.lock.Unlock() + duration := time.Since(begin) + level.Info(c.logger).Log("msg", "Collect all products done", "duration_seconds", duration.Seconds()) + } + c.lock.RLock() + defer c.lock.RUnlock() + if c.err != nil { + return nil, func() {}, c.err + } + return c.cache, func() {}, nil +} diff --git a/pkg/client/client.go b/pkg/client/client.go index 308c314..4dcd8d9 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -1,13 +1,15 @@ package client import ( + "net/http" + "net/url" + cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" kafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" cmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq/v20190304" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" @@ -25,331 +27,244 @@ import ( tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" - "net/http" - "net/url" - cos "github.com/tencentyun/cos-go-sdk-v5" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) -func NewMonitorClient(conf *config.TencentConfig) (*monitor.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewMonitorClient(cred common.CredentialIface, conf *config.TencentConfig) (*monitor.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "monitor.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "monitor.tencentcloudapi.com" } - return monitor.NewClient(credential, conf.Credential.Region, cpf) + return monitor.NewClient(cred, conf.Credential.Region, cpf) } -func NewMongodbClient(conf *config.TencentConfig) (*mongodb.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewMongodbClient(cred common.CredentialIface, conf *config.TencentConfig) (*mongodb.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "mongodb.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "mongodb.tencentcloudapi.com" } - return mongodb.NewClient(credential, conf.Credential.Region, cpf) + return mongodb.NewClient(cred, conf.Credential.Region, cpf) } -func NewCdbClient(conf *config.TencentConfig) (*cdb.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewCdbClient(cred common.CredentialIface, conf *config.TencentConfig) (*cdb.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "cdb.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "cdb.tencentcloudapi.com" } - return cdb.NewClient(credential, conf.Credential.Region, cpf) + return cdb.NewClient(cred, conf.Credential.Region, cpf) } -func NewCvmClient(conf *config.TencentConfig) (*cvm.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewCvmClient(cred common.CredentialIface, conf *config.TencentConfig) (*cvm.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "cvm.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "cvm.tencentcloudapi.com" } - return cvm.NewClient(credential, conf.Credential.Region, cpf) + return cvm.NewClient(cred, conf.Credential.Region, cpf) } -func NewRedisClient(conf *config.TencentConfig) (*redis.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewRedisClient(cred common.CredentialIface, conf *config.TencentConfig) (*redis.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "redis.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "redis.tencentcloudapi.com" } - return redis.NewClient(credential, conf.Credential.Region, cpf) + return redis.NewClient(cred, conf.Credential.Region, cpf) } -func NewDcClient(conf *config.TencentConfig) (*dc.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewDcClient(cred common.CredentialIface, conf *config.TencentConfig) (*dc.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "dc.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "dc.tencentcloudapi.com" } - return dc.NewClient(credential, conf.Credential.Region, cpf) + return dc.NewClient(cred, conf.Credential.Region, cpf) } -func NewClbClient(conf *config.TencentConfig) (*clb.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewClbClient(cred common.CredentialIface, conf *config.TencentConfig) (*clb.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "clb.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "clb.tencentcloudapi.com" } - return clb.NewClient(credential, conf.Credential.Region, cpf) + return clb.NewClient(cred, conf.Credential.Region, cpf) } -func NewVpvClient(conf *config.TencentConfig) (*vpc.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewVpvClient(cred common.CredentialIface, conf *config.TencentConfig) (*vpc.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "vpc.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "vpc.tencentcloudapi.com" } - return vpc.NewClient(credential, conf.Credential.Region, cpf) + return vpc.NewClient(cred, conf.Credential.Region, cpf) } -func NewCbsClient(conf *config.TencentConfig) (*cbs.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewCbsClient(cred common.CredentialIface, conf *config.TencentConfig) (*cbs.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "cbs.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "cbs.tencentcloudapi.com" } - return cbs.NewClient(credential, conf.Credential.Region, cpf) + return cbs.NewClient(cred, conf.Credential.Region, cpf) } -func NewSqlServerClient(conf *config.TencentConfig) (*sqlserver.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewSqlServerClient(cred common.CredentialIface, conf *config.TencentConfig) (*sqlserver.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "sqlserver.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "sqlserver.tencentcloudapi.com" } - return sqlserver.NewClient(credential, conf.Credential.Region, cpf) + return sqlserver.NewClient(cred, conf.Credential.Region, cpf) } -func NewMariaDBClient(conf *config.TencentConfig) (*mariadb.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewMariaDBClient(cred common.CredentialIface, conf *config.TencentConfig) (*mariadb.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "mariadb.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "mariadb.tencentcloudapi.com" } - return mariadb.NewClient(credential, conf.Credential.Region, cpf) + return mariadb.NewClient(cred, conf.Credential.Region, cpf) } -func NewESClient(conf *config.TencentConfig) (*es.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewESClient(cred common.CredentialIface, conf *config.TencentConfig) (*es.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "es.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "es.tencentcloudapi.com" } - return es.NewClient(credential, conf.Credential.Region, cpf) + return es.NewClient(cred, conf.Credential.Region, cpf) } -func NewCMQClient(conf *config.TencentConfig) (*cmq.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewCMQClient(cred common.CredentialIface, conf *config.TencentConfig) (*cmq.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "cmq.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "cmq.tencentcloudapi.com" } - return cmq.NewClient(credential, conf.Credential.Region, cpf) + return cmq.NewClient(cred, conf.Credential.Region, cpf) } -func NewPGClient(conf *config.TencentConfig) (*pg.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewPGClient(cred common.CredentialIface, conf *config.TencentConfig) (*pg.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "postgres.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "postgres.tencentcloudapi.com" } - return pg.NewClient(credential, conf.Credential.Region, cpf) + return pg.NewClient(cred, conf.Credential.Region, cpf) } -func NewMemcacheClient(conf *config.TencentConfig) (*memcached.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewMemcacheClient(cred common.CredentialIface, conf *config.TencentConfig) (*memcached.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "memcached.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "memcached.tencentcloudapi.com" } - return memcached.NewClient(credential, conf.Credential.Region, cpf) + return memcached.NewClient(cred, conf.Credential.Region, cpf) } -func NewLighthouseClient(conf *config.TencentConfig) (*lh.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewLighthouseClient(cred common.CredentialIface, conf *config.TencentConfig) (*lh.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "lighthouse.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "lighthouse.tencentcloudapi.com" } - return lh.NewClient(credential, conf.Credential.Region, cpf) + return lh.NewClient(cred, conf.Credential.Region, cpf) } -func NewKafkaClient(conf *config.TencentConfig) (*kafka.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewKafkaClient(cred common.CredentialIface, conf *config.TencentConfig) (*kafka.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "ckafka.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "ckafka.tencentcloudapi.com" } - return kafka.NewClient(credential, conf.Credential.Region, cpf) + return kafka.NewClient(cred, conf.Credential.Region, cpf) } -func NewDCDBClient(conf *config.TencentConfig) (*dcdb.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewDCDBClient(cred common.CredentialIface, conf *config.TencentConfig) (*dcdb.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "dcdb.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "dcdb.tencentcloudapi.com" } - return dcdb.NewClient(credential, conf.Credential.Region, cpf) + return dcdb.NewClient(cred, conf.Credential.Region, cpf) } -func NewTDMQClient(conf *config.TencentConfig) (*tdmq.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewTDMQClient(cred common.CredentialIface, conf *config.TencentConfig) (*tdmq.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "tdmq.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "tdmq.tencentcloudapi.com" } - return tdmq.NewClient(credential, conf.Credential.Region, cpf) + return tdmq.NewClient(cred, conf.Credential.Region, cpf) } -func NewTseClient(conf *config.TencentConfig) (*tse.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewTseClient(cred common.CredentialIface, conf *config.TencentConfig) (*tse.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "tse.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "tse.tencentcloudapi.com" } - return tse.NewClient(credential, conf.Credential.Region, cpf) + return tse.NewClient(cred, conf.Credential.Region, cpf) } -func NewCynosdbClient(conf *config.TencentConfig) (*cynosdb.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewCynosdbClient(cred common.CredentialIface, conf *config.TencentConfig) (*cynosdb.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "cynosdb.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "cynosdb.tencentcloudapi.com" } - return cynosdb.NewClient(credential, conf.Credential.Region, cpf) + return cynosdb.NewClient(cred, conf.Credential.Region, cpf) } -func NewCdnClient(conf *config.TencentConfig) (*cdn.Client, error) { - credential := common.NewCredential( - conf.Credential.AccessKey, - conf.Credential.SecretKey, - ) +func NewCdnClient(cred common.CredentialIface, conf *config.TencentConfig) (*cdn.Client, error) { cpf := profile.NewClientProfile() if conf.Credential.IsInternal == true { cpf.HttpProfile.Endpoint = "cdn.internal.tencentcloudapi.com" } else { cpf.HttpProfile.Endpoint = "cdn.tencentcloudapi.com" } - return cdn.NewClient(credential, "", cpf) + return cdn.NewClient(cred, "", cpf) } -func NewCosClient(conf *config.TencentConfig) (*cos.Client, error) { +func NewCosClient(cred common.CredentialIface, conf *config.TencentConfig) (*cos.Client, error) { // 用于Get Service 查询, service域名暂时只支持外网 su, _ := url.Parse("http://cos." + conf.Credential.Region + ".myqcloud.com") b := &cos.BaseURL{BucketURL: nil, ServiceURL: su} + //client := cos.NewClient(b, &http.Client{ + // Transport: &cos.AuthorizationTransport{ + // SecretID: conf.Credential.AccessKey, + // SecretKey: conf.Credential.SecretKey, + // }, + //}) client := cos.NewClient(b, &http.Client{ - Transport: &cos.AuthorizationTransport{ - SecretID: conf.Credential.AccessKey, - SecretKey: conf.Credential.SecretKey, - }, + Transport: common.NewCredentialTransport(cred.GetRole()), }) return client, nil } diff --git a/pkg/collector/collector.go b/pkg/collector/collector.go index 5451206..c02a217 100644 --- a/pkg/collector/collector.go +++ b/pkg/collector/collector.go @@ -6,8 +6,10 @@ import ( "sync" "time" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" "github.com/prometheus/client_golang/prometheus" "github.com/tencentyun/tencentcloud-exporter/pkg/config" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" @@ -53,9 +55,6 @@ func (n *TcMonitorCollector) Describe(ch chan<- *prometheus.Desc) { } func (n *TcMonitorCollector) Collect(ch chan<- prometheus.Metric) { - n.lock.Lock() - defer n.lock.Unlock() - wg := sync.WaitGroup{} wg.Add(len(n.Collectors)) for name, c := range n.Collectors { @@ -86,11 +85,11 @@ func collect(name string, c *TcProductCollector, ch chan<- prometheus.Metric, lo ch <- prometheus.MustNewConstMetric(scrapeSuccessDesc, prometheus.GaugeValue, success, name) } -func NewTcMonitorCollector(conf *config.TencentConfig, logger log.Logger) (*TcMonitorCollector, error) { +func NewTcMonitorCollector(cred common.CredentialIface, conf *config.TencentConfig, logger log.Logger) (*TcMonitorCollector, error) { collectors := make(map[string]*TcProductCollector) reloaders := make(map[string]*TcProductCollectorReloader) - metricRepo, err := metric.NewTcmMetricRepository(conf, logger) + metricRepo, err := metric.NewTcmMetricRepository(cred, conf, logger) if err != nil { return nil, err } @@ -108,7 +107,7 @@ func NewTcMonitorCollector(conf *config.TencentConfig, logger log.Logger) (*TcMo return nil, err } - collector, err := NewTcProductCollector(namespace, metricRepoCache, conf, &pconf, logger) + collector, err := NewTcProductCollector(namespace, metricRepoCache, cred, conf, &pconf, logger) if err != nil { panic(fmt.Sprintf("Create product collecter fail, err=%s, Namespace=%s", err, namespace)) } diff --git a/pkg/collector/handler.go b/pkg/collector/handler.go index 06d02f3..0063e52 100644 --- a/pkg/collector/handler.go +++ b/pkg/collector/handler.go @@ -2,15 +2,17 @@ package collector import ( "fmt" + + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/util" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) var ( - handlerFactoryMap = make(map[string]func(*TcProductCollector, log.Logger) (ProductHandler, error)) + handlerFactoryMap = make(map[string]func(common.CredentialIface, *TcProductCollector, log.Logger) (ProductHandler, error)) ) // 每个产品的指标处理逻辑 @@ -30,7 +32,7 @@ type ProductHandler interface { } // 将对应的产品handler注册到Factory中 -func registerHandler(namespace string, _ bool, factory func(*TcProductCollector, log.Logger) (ProductHandler, error)) { +func registerHandler(namespace string, _ bool, factory func(common.CredentialIface, *TcProductCollector, log.Logger) (ProductHandler, error)) { handlerFactoryMap[namespace] = factory } diff --git a/pkg/collector/handler_cbs.go b/pkg/collector/handler_cbs.go index 9ba7aaf..46e6495 100644 --- a/pkg/collector/handler_cbs.go +++ b/pkg/collector/handler_cbs.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -30,7 +31,7 @@ func (h *cbsHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewCbsHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCbsHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &cbsHandler{ baseProductHandler{ monitorQueryKey: CbsInstanceidKey, diff --git a/pkg/collector/handler_cdb.go b/pkg/collector/handler_cdb.go index 6dcbd75..e6d2ebd 100644 --- a/pkg/collector/handler_cdb.go +++ b/pkg/collector/handler_cdb.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -50,7 +51,7 @@ func (h *cdbHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewCdbHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCdbHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &cdbHandler{ baseProductHandler{ monitorQueryKey: CdbInstanceidKey, diff --git a/pkg/collector/handler_cdn.go b/pkg/collector/handler_cdn.go index f349f26..5df1c7a 100644 --- a/pkg/collector/handler_cdn.go +++ b/pkg/collector/handler_cdn.go @@ -2,8 +2,10 @@ package collector import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -148,7 +150,7 @@ func (h *cdnHandler) checkMonitorQueryKeys(m *metric.TcmMetric, ql map[string]st return true } -func NewCdnHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCdnHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &cdnHandler{ baseProductHandler{ collector: c, diff --git a/pkg/collector/handler_clb.go b/pkg/collector/handler_clb.go index 701e8e2..349e765 100644 --- a/pkg/collector/handler_clb.go +++ b/pkg/collector/handler_clb.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -35,7 +36,7 @@ func (h *clbHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewClbHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewClbHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &clbHandler{ baseProductHandler{ monitorQueryKey: ClbInstanceidKey, diff --git a/pkg/collector/handler_clb7.go b/pkg/collector/handler_clb7.go index 7ac8843..098c63a 100644 --- a/pkg/collector/handler_clb7.go +++ b/pkg/collector/handler_clb7.go @@ -3,7 +3,8 @@ package collector import ( "strings" - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -52,7 +53,7 @@ func (h *clb7Handler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewClb7Handler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewClb7Handler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &clb7Handler{ baseProductHandler{ monitorQueryKey: Clb7InstanceidKey, diff --git a/pkg/collector/handler_cmq.go b/pkg/collector/handler_cmq.go index cbc16d6..fc97ea4 100644 --- a/pkg/collector/handler_cmq.go +++ b/pkg/collector/handler_cmq.go @@ -2,8 +2,10 @@ package collector import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -49,14 +51,14 @@ func (h *cmqHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, level.Error(h.logger).Log("msg", "Instance not found", "id", insId) continue } - queueName,err:=ins.GetFieldValueByName("QueueName") - if err!=nil{ + queueName, err := ins.GetFieldValueByName("QueueName") + if err != nil { level.Error(h.logger).Log("msg", "queue name not found") continue } ql := map[string]string{ h.monitorQueryKey: ins.GetMonitorQueryKey(), - "queueName":queueName, // hack, hardcode 🤮 + "queueName": queueName, // hack, hardcode 🤮 } s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { @@ -79,14 +81,14 @@ func (h *cmqHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e if len(m.Conf.ExcludeInstances) != 0 && util.IsStrInList(m.Conf.ExcludeInstances, ins.GetInstanceId()) { continue } - queueName,err:=ins.GetFieldValueByName("QueueName") - if err!=nil{ + queueName, err := ins.GetFieldValueByName("QueueName") + if err != nil { level.Error(h.logger).Log("msg", "queue name not found") continue } ql := map[string]string{ h.monitorQueryKey: ins.GetMonitorQueryKey(), - "queueName":queueName, // hack, hardcode 🤮 + "queueName": queueName, // hack, hardcode 🤮 } s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { @@ -99,7 +101,7 @@ func (h *cmqHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e return slist, nil } -func NewCMQHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCMQHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &cmqHandler{ baseProductHandler{ monitorQueryKey: CMQInstanceIDKey, diff --git a/pkg/collector/handler_cmqtopic.go b/pkg/collector/handler_cmqtopic.go index d98ff78..a61fa69 100644 --- a/pkg/collector/handler_cmqtopic.go +++ b/pkg/collector/handler_cmqtopic.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" ) const ( @@ -20,7 +21,7 @@ type cmqTopicHandler struct { func (h *cmqTopicHandler) GetNamespace() string { return CMQTopicNamespace } -func NewCMQTopicHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCMQTopicHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &cmqTopicHandler{ baseProductHandler{ monitorQueryKey: CMQTopicInstanceIDKey, diff --git a/pkg/collector/handler_cos.go b/pkg/collector/handler_cos.go index 67850a0..df5d107 100644 --- a/pkg/collector/handler_cos.go +++ b/pkg/collector/handler_cos.go @@ -3,8 +3,9 @@ package collector import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -115,7 +116,7 @@ func (h *cosHandler) checkMonitorQueryKeys(m *metric.TcmMetric, ql map[string]st return true } -func NewCosHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCosHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &cosHandler{ baseProductHandler{ collector: c, diff --git a/pkg/collector/handler_cvm.go b/pkg/collector/handler_cvm.go index c28b777..de17bab 100644 --- a/pkg/collector/handler_cvm.go +++ b/pkg/collector/handler_cvm.go @@ -3,7 +3,8 @@ package collector import ( "strings" - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -51,7 +52,7 @@ func (h *cvmHandler) GetSeries(m *metric.TcmMetric) (slist []*metric.TcmSeries, return h.baseProductHandler.GetSeries(m) } -func NewCvmHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCvmHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &cvmHandler{ baseProductHandler{ monitorQueryKey: CvmInstanceidKey, diff --git a/pkg/collector/handler_cynosdb.go b/pkg/collector/handler_cynosdb.go index 29e7e6e..6fc755e 100644 --- a/pkg/collector/handler_cynosdb.go +++ b/pkg/collector/handler_cynosdb.go @@ -2,8 +2,10 @@ package collector import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/instance" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" @@ -179,7 +181,7 @@ func (h *CynosdbHandler) getClusterIdSeries(m *metric.TcmMetric, ins instance.Tc return series, nil } -func NewCynosdbHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewCynosdbHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &CynosdbHandler{ baseProductHandler{ monitorQueryKey: CynosdbInstanceidKey, diff --git a/pkg/collector/handler_dc.go b/pkg/collector/handler_dc.go index 6fac058..79c4c7b 100644 --- a/pkg/collector/handler_dc.go +++ b/pkg/collector/handler_dc.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -30,7 +31,7 @@ func (h *dcHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewDcHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewDcHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &dcHandler{ baseProductHandler{ monitorQueryKey: DcInstanceidKey, diff --git a/pkg/collector/handler_dcdb.go b/pkg/collector/handler_dcdb.go index a6f2d48..fa8993b 100644 --- a/pkg/collector/handler_dcdb.go +++ b/pkg/collector/handler_dcdb.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -30,7 +31,7 @@ func (h *dcdbHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewDcdbHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewDcdbHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &dcdbHandler{ baseProductHandler{ monitorQueryKey: DcdbInstanceidKey, diff --git a/pkg/collector/handler_dcx.go b/pkg/collector/handler_dcx.go index 449827b..47dd775 100644 --- a/pkg/collector/handler_dcx.go +++ b/pkg/collector/handler_dcx.go @@ -3,7 +3,8 @@ package collector import ( "strings" - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -40,7 +41,7 @@ func (h *dcxHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewDcxHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewDcxHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &dcxHandler{ baseProductHandler{ monitorQueryKey: DcxInstanceidKey, diff --git a/pkg/collector/handler_eip.go b/pkg/collector/handler_eip.go index 75017c0..445e702 100644 --- a/pkg/collector/handler_eip.go +++ b/pkg/collector/handler_eip.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -28,7 +29,7 @@ func (h *eipHandler) IsMetricVaild(m *metric.TcmMetric) bool { } return true } -func NewEIPHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewEIPHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &eipHandler{ baseProductHandler{ monitorQueryKey: EIPInstanceidKey, diff --git a/pkg/collector/handler_es.go b/pkg/collector/handler_es.go index aeca82b..d9a4452 100644 --- a/pkg/collector/handler_es.go +++ b/pkg/collector/handler_es.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" ) const ( @@ -21,7 +22,7 @@ func (h *esHandler) GetNamespace() string { return ESNamespace } -func NewESHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewESHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &esHandler{ baseProductHandler{ monitorQueryKey: ESInstanceIDKey, diff --git a/pkg/collector/handler_kafka.go b/pkg/collector/handler_kafka.go index 301e126..639d6f0 100644 --- a/pkg/collector/handler_kafka.go +++ b/pkg/collector/handler_kafka.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -37,7 +38,7 @@ func (h *kafkaHandler) IsMetricVaild(m *metric.TcmMetric) bool { } return true } -func NewKafkaHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewKafkaHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &kafkaHandler{ baseProductHandler{ monitorQueryKey: KafkaInstanceIDKey, diff --git a/pkg/collector/handler_lighthouse.go b/pkg/collector/handler_lighthouse.go index 1633dab..1877b78 100644 --- a/pkg/collector/handler_lighthouse.go +++ b/pkg/collector/handler_lighthouse.go @@ -3,7 +3,8 @@ package collector import ( "strings" - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -47,7 +48,7 @@ func (h *lighthouseHandler) GetSeries(m *metric.TcmMetric) (slist []*metric.TcmS return h.baseProductHandler.GetSeries(m) } -func NewLighthouseHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewLighthouseHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &lighthouseHandler{ baseProductHandler{ monitorQueryKey: LighthouseInstanceIDKey, diff --git a/pkg/collector/handler_mariadb.go b/pkg/collector/handler_mariadb.go index ea29c15..f4a69aa 100644 --- a/pkg/collector/handler_mariadb.go +++ b/pkg/collector/handler_mariadb.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" ) const ( @@ -20,7 +21,7 @@ type mariaDBHandler struct { func (h *mariaDBHandler) GetNamespace() string { return MariaDBNamespace } -func NewMariaDBHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewMariaDBHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &mariaDBHandler{ baseProductHandler{ monitorQueryKey: MariaDBInstanceIDKey, diff --git a/pkg/collector/handler_memcached.go b/pkg/collector/handler_memcached.go index 94dbb24..fab3398 100644 --- a/pkg/collector/handler_memcached.go +++ b/pkg/collector/handler_memcached.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" ) const ( @@ -21,7 +22,7 @@ func (h *memcachedHandler) GetNamespace() string { return MemcachedNamespace } -func NewMemcachedHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewMemcachedHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &memcachedHandler{ baseProductHandler{ monitorQueryKey: MemcachedInstanceIDKey, diff --git a/pkg/collector/handler_mongo.go b/pkg/collector/handler_mongo.go index e44adc9..67f7574 100644 --- a/pkg/collector/handler_mongo.go +++ b/pkg/collector/handler_mongo.go @@ -4,9 +4,10 @@ import ( "fmt" "strings" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/instance" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" @@ -200,7 +201,7 @@ func (h *mongoHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.T return } -func NewMongoHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewMongoHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &mongoHandler{ baseProductHandler: baseProductHandler{ monitorQueryKey: MongoInstanceidKey, diff --git a/pkg/collector/handler_nacos.go b/pkg/collector/handler_nacos.go index dc3d284..3b9d476 100644 --- a/pkg/collector/handler_nacos.go +++ b/pkg/collector/handler_nacos.go @@ -2,12 +2,14 @@ package collector import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "time" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/instance" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" - "time" ) const ( @@ -192,15 +194,15 @@ func (h *NacosHandler) getInterfaceSeries(m *metric.TcmMetric, ins instance.TcIn } return series, nil } -func NewNacosHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { - podRepo, err := instance.NewNacosTcInstancePodRepository(c.Conf, logger) +func NewNacosHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { + podRepo, err := instance.NewNacosTcInstancePodRepository(cred, c.Conf, logger) if err != nil { return nil, err } relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) podRepoCahe := instance.NewTcNacosInstancePodCache(podRepo, relodInterval, logger) - interfaceRepo, err := instance.NewNacosTcInstanceInterfaceRepository(c.Conf, logger) + interfaceRepo, err := instance.NewNacosTcInstanceInterfaceRepository(cred, c.Conf, logger) if err != nil { return nil, err } diff --git a/pkg/collector/handler_nat.go b/pkg/collector/handler_nat.go index 70a9af3..c531ec5 100644 --- a/pkg/collector/handler_nat.go +++ b/pkg/collector/handler_nat.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -30,7 +31,7 @@ func (h *natHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewNatHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewNatHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &natHandler{ baseProductHandler{ monitorQueryKey: NatMonitorQueryKey, diff --git a/pkg/collector/handler_pg.go b/pkg/collector/handler_pg.go index 2867f34..255754a 100644 --- a/pkg/collector/handler_pg.go +++ b/pkg/collector/handler_pg.go @@ -1,11 +1,12 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" ) const ( - PGNamespace = "QCE/POSTGRES" + PGNamespace = "QCE/POSTGRES" PGDBInstanceIDKey = "resourceId" ) @@ -20,7 +21,7 @@ type pgHandler struct { func (h *pgHandler) GetNamespace() string { return MariaDBNamespace } -func NewPGHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewPGHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &pgHandler{ baseProductHandler{ monitorQueryKey: PGDBInstanceIDKey, diff --git a/pkg/collector/handler_redis.go b/pkg/collector/handler_redis.go index 74577ca..91c5d3c 100644 --- a/pkg/collector/handler_redis.go +++ b/pkg/collector/handler_redis.go @@ -3,7 +3,8 @@ package collector import ( "strings" - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" ) @@ -58,7 +59,7 @@ func (h *redisHandler) IsMetricVaild(m *metric.TcmMetric) bool { return false } -func NewRedisHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewRedisHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &redisHandler{ baseProductHandler{ monitorQueryKey: RedisInstanceidKey, diff --git a/pkg/collector/handler_redis_mem.go b/pkg/collector/handler_redis_mem.go index 88111c4..b583ffc 100644 --- a/pkg/collector/handler_redis_mem.go +++ b/pkg/collector/handler_redis_mem.go @@ -2,13 +2,15 @@ package collector import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "strings" + "time" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/instance" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" - "strings" - "time" ) const ( @@ -206,8 +208,8 @@ func (h *redisMemHandler) getNodeSeries(m *metric.TcmMetric, ins instance.TcInst return series, nil } -func NewRedisMemHandler(c *TcProductCollector, logger log.Logger) (ProductHandler, error) { - nodeRepo, err := instance.NewRedisTcInstanceNodeRepository(c.Conf, logger) +func NewRedisMemHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (ProductHandler, error) { + nodeRepo, err := instance.NewRedisTcInstanceNodeRepository(cred, c.Conf, logger) if err != nil { return nil, err } diff --git a/pkg/collector/handler_sqlserver.go b/pkg/collector/handler_sqlserver.go index c0ea6dc..4a536fa 100644 --- a/pkg/collector/handler_sqlserver.go +++ b/pkg/collector/handler_sqlserver.go @@ -1,8 +1,9 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -31,7 +32,7 @@ func (h *sqlServerHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewSqlServerHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewSqlServerHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &sqlServerHandler{ baseProductHandler{ monitorQueryKey: SqlServerInstanceidKey, diff --git a/pkg/collector/handler_tdmq.go b/pkg/collector/handler_tdmq.go index d9d0b4e..b3834c2 100644 --- a/pkg/collector/handler_tdmq.go +++ b/pkg/collector/handler_tdmq.go @@ -2,12 +2,14 @@ package collector import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "time" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/instance" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" - "time" ) const ( @@ -185,15 +187,15 @@ func (h *tdmqHandler) getNamespaceSeries(m *metric.TcmMetric, ins instance.TcIns return series, nil } -func NewTdmqHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { - namespaceRepo, err := instance.NewTdmqTcInstanceRocketMQNameSpacesRepository(c.Conf, logger) +func NewTdmqHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { + namespaceRepo, err := instance.NewTdmqTcInstanceRocketMQNameSpacesRepository(cred, c.Conf, logger) if err != nil { return nil, err } relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) namespaceRepoCahe := instance.NewTcTdmqInstanceNamespaceCache(namespaceRepo, relodInterval, logger) - topicRepo, err := instance.NewTdmqTcInstanceRocketMQTopicsRepository(c.Conf, logger) + topicRepo, err := instance.NewTdmqTcInstanceRocketMQTopicsRepository(cred, c.Conf, logger) if err != nil { return nil, err } diff --git a/pkg/collector/handler_vpngw.go b/pkg/collector/handler_vpngw.go index b98280b..28fcdc9 100644 --- a/pkg/collector/handler_vpngw.go +++ b/pkg/collector/handler_vpngw.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -41,7 +42,7 @@ func (h *VpngwHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewVpngwHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewVpngwHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &tdmqHandler{ baseProductHandler: baseProductHandler{ monitorQueryKey: VpngwInstanceidKey, diff --git a/pkg/collector/handler_vpnx.go b/pkg/collector/handler_vpnx.go index 66a6620..aaa0ffd 100644 --- a/pkg/collector/handler_vpnx.go +++ b/pkg/collector/handler_vpnx.go @@ -1,7 +1,8 @@ package collector import ( - "github.com/go-kit/kit/log" + "github.com/go-kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" ) @@ -41,7 +42,7 @@ func (h *VpnxHandler) IsMetricVaild(m *metric.TcmMetric) bool { return true } -func NewVpnxHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { +func NewVpnxHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { handler = &tdmqHandler{ baseProductHandler: baseProductHandler{ monitorQueryKey: VpnxInstanceidKey, diff --git a/pkg/collector/handler_zookeeper.go b/pkg/collector/handler_zookeeper.go index c258c0e..e4fcca1 100644 --- a/pkg/collector/handler_zookeeper.go +++ b/pkg/collector/handler_zookeeper.go @@ -1,13 +1,16 @@ package collector import ( + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "time" + + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/instance" "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" - "time" ) const ( @@ -192,15 +195,15 @@ func (h *ZookeeperHandler) getInterfaceSeries(m *metric.TcmMetric, ins instance. return series, nil } -func NewZookeeperHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { - podRepo, err := instance.NewZookeeperTcInstancePodRepository(c.Conf, logger) +func NewZookeeperHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { + podRepo, err := instance.NewZookeeperTcInstancePodRepository(cred, c.Conf, logger) if err != nil { return nil, err } relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) podRepoCahe := instance.NewTcZookeeperInstancePodCache(podRepo, relodInterval, logger) - interfaceRepo, err := instance.NewZookeeperTcInstanceInterfaceRepository(c.Conf, logger) + interfaceRepo, err := instance.NewZookeeperTcInstanceInterfaceRepository(cred, c.Conf, logger) if err != nil { return nil, err } diff --git a/pkg/collector/product.go b/pkg/collector/product.go index 714f750..174514e 100644 --- a/pkg/collector/product.go +++ b/pkg/collector/product.go @@ -3,13 +3,16 @@ package collector import ( "context" "fmt" - "github.com/tencentyun/tencentcloud-exporter/pkg/constant" "strings" "sync" "time" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/tencentyun/tencentcloud-exporter/pkg/constant" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" "github.com/prometheus/client_golang/prometheus" "github.com/tencentyun/tencentcloud-exporter/pkg/config" "github.com/tencentyun/tencentcloud-exporter/pkg/instance" @@ -301,7 +304,7 @@ func (r *TcProductCollectorReloader) reloadMetricsByProductConf() error { } // 创建新的TcProductCollector, 每个产品一个 -func NewTcProductCollector(namespace string, metricRepo metric.TcmMetricRepository, +func NewTcProductCollector(namespace string, metricRepo metric.TcmMetricRepository, cred common.CredentialIface, conf *config.TencentConfig, pconf *config.TencentProduct, logger log.Logger) (*TcProductCollector, error) { factory, exists := handlerFactoryMap[namespace] if !exists { @@ -311,7 +314,7 @@ func NewTcProductCollector(namespace string, metricRepo metric.TcmMetricReposito var instanceRepoCache instance.TcInstanceRepository if !util.IsStrInList(constant.NotSupportInstanceNamespaces, namespace) { // 支持实例自动发现的产品 - instanceRepo, err := instance.NewTcInstanceRepository(namespace, conf, logger) + instanceRepo, err := instance.NewTcInstanceRepository(namespace, cred, conf, logger) if err != nil { return nil, err } @@ -329,7 +332,7 @@ func NewTcProductCollector(namespace string, metricRepo metric.TcmMetricReposito logger: logger, } - handler, err := factory(c, logger) + handler, err := factory(cred, c, logger) if err != nil { return nil, err } diff --git a/pkg/common/credentials.go b/pkg/common/credentials.go new file mode 100644 index 0000000..3e69998 --- /dev/null +++ b/pkg/common/credentials.go @@ -0,0 +1,171 @@ +package common + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "sync" + "time" + + "github.com/tencentyun/cos-go-sdk-v5" +) + +type CredentialIface interface { + GetSecretId() string + GetToken() string + GetSecretKey() string + Refresh() error + GetRole() string +} + +type Credential struct { + rwLocker sync.RWMutex + Transport http.RoundTripper + SecretId string + SecretKey string + Token string + ExpiredTime int64 + Role string +} + +type metadataResponse struct { + TmpSecretId string + TmpSecretKey string + Token string + ExpiredTime int64 + Code string +} + +func (c *Credential) Refresh() error { + tick := time.NewTicker(10 * time.Minute) + defer tick.Stop() + for { + select { + case <-tick.C: + err := c.refresh() + if err != nil { + fmt.Println("refresh credential error: ", err.Error()) + } + } + } +} + +func (c *Credential) refresh() error { + c.rwLocker.RLock() + expiredTime := c.ExpiredTime + c.rwLocker.RUnlock() + if time.Now().Unix() < expiredTime-720 { + return nil + } + res, err := http.Get(fmt.Sprintf("http://metadata.tencentyun.com/meta-data/cam/service-role-security-credentials/%s", c.Role)) + if err != nil { + return err + } + + if res.StatusCode != 200 { + _ = res.Body.Close() + res, err = http.Get(fmt.Sprintf("http://metadata.tencentyun.com/meta-data/cam/security-credentials/%s", c.Role)) + if err != nil { + return err + } + if res.StatusCode != 200 { + return fmt.Errorf("status code is %d", res.StatusCode) + } + } + + defer func() { _ = res.Body.Close() }() + + data, err := ioutil.ReadAll(res.Body) + if err != nil { + return err + } + + metaData := &metadataResponse{} + if err := json.Unmarshal(data, metaData); err != nil { + return err + } + + if metaData.Code != "Success" { + return fmt.Errorf("get Code is %s", metaData.Code) + } + + c.rwLocker.Lock() + defer c.rwLocker.Unlock() + c.SecretId = metaData.TmpSecretId + c.SecretKey = metaData.TmpSecretKey + c.Token = metaData.Token + c.ExpiredTime = metaData.ExpiredTime + return nil +} + +func NewCredential(role string) (*Credential, error) { + c := &Credential{ + Role: role, + } + err := c.refresh() + return c, err +} + +func NewCredentialTransport(role string) *Credential { + return &Credential{ + Role: role, + } +} + +func (c *Credential) GetSecretKey() string { + c.rwLocker.RLock() + defer c.rwLocker.RUnlock() + return c.SecretKey +} + +func (c *Credential) GetSecretId() string { + c.rwLocker.RLock() + defer c.rwLocker.RUnlock() + return c.SecretId +} + +func (c *Credential) GetToken() string { + c.rwLocker.RLock() + defer c.rwLocker.RUnlock() + return c.Token +} + +func (c *Credential) GetRole() string { + return c.Role +} + +func (c *Credential) RoundTrip(req *http.Request) (*http.Response, error) { + err := c.refresh() + if err != nil { + return nil, err + } + req = cloneRequest(req) + // 增加 Authorization header + authTime := cos.NewAuthTime(time.Hour) + cos.AddAuthorizationHeader(c.GetSecretId(), c.GetSecretKey(), c.GetToken(), req, authTime) + + resp, err := c.transport().RoundTrip(req) + return resp, err +} + +func (c *Credential) transport() http.RoundTripper { + if c.Transport != nil { + return c.Transport + } + return http.DefaultTransport +} + +// cloneRequest returns a clone of the provided *http.Request. The clone is a +// shallow copy of the struct and its Header map. +func cloneRequest(r *http.Request) *http.Request { + // shallow copy of the struct + r2 := new(http.Request) + *r2 = *r + // deep copy of the Header + r2.Header = make(http.Header, len(r.Header)) + for k, s := range r.Header { + r2.Header[k] = append([]string(nil), s...) + } + return r2 +} diff --git a/pkg/config/config.go b/pkg/config/config.go index d928f9a..a22c8af 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -18,9 +18,10 @@ const ( DefaultRateLimit = 15 DefaultQueryMetricBatchSize = 50 - EnvAccessKey = "TENCENTCLOUD_SECRET_ID" - EnvSecretKey = "TENCENTCLOUD_SECRET_KEY" - EnvRegion = "TENCENTCLOUD_REGION" + EnvAccessKey = "TENCENTCLOUD_SECRET_ID" + EnvSecretKey = "TENCENTCLOUD_SECRET_KEY" + EnvServiceRole = "TENCENTCLOUD_SERVICE_ROLE" + EnvRegion = "TENCENTCLOUD_REGION" ) var ( @@ -73,10 +74,13 @@ var ( ) type TencentCredential struct { - AccessKey string `yaml:"access_key"` - SecretKey string `yaml:"secret_key"` - Region string `yaml:"region"` - IsInternal bool `yaml:"is_internal"` + AccessKey string `yaml:"access_key"` + SecretKey string `yaml:"secret_key"` + Role string `yaml:"role"` + Region string `yaml:"region"` + Token string `yaml:"token"` + ExpiredTime int64 `yaml:"expired_time"` + IsInternal bool `yaml:"is_internal"` } type TencentMetric struct { @@ -112,6 +116,14 @@ type TencentProduct struct { RelodIntervalMinutes int64 `yaml:"relod_interval_minutes"` } +type metadataResponse struct { + TmpSecretId string + TmpSecretKey string + Token string + ExpiredTime int64 + Code string +} + func (p *TencentProduct) IsReloadEnable() bool { if util.IsStrInList(constant.NotSupportInstanceNamespaces, p.Namespace) { return false @@ -126,6 +138,7 @@ type TencentConfig struct { RateLimit float64 `yaml:"rate_limit"` MetricQueryBatchSize int `yaml:"metric_query_batch_size"` Filename string `yaml:"filename"` + CacheInterval int64 `yaml:"cache_interval"` // 单位 s } func NewConfig() *TencentConfig { @@ -140,7 +153,6 @@ func (c *TencentConfig) LoadFile(filename string) error { } if err = yaml.UnmarshalStrict(content, c); err != nil { return err - } if err = c.check(); err != nil { return err @@ -152,16 +164,19 @@ func (c *TencentConfig) LoadFile(filename string) error { func (c *TencentConfig) check() (err error) { if c.Credential.AccessKey == "" { c.Credential.AccessKey = os.Getenv(EnvAccessKey) - if c.Credential.AccessKey == "" { - return fmt.Errorf("credential.access_key is empty, must be set") - } } if c.Credential.SecretKey == "" { c.Credential.SecretKey = os.Getenv(EnvSecretKey) - if c.Credential.SecretKey == "" { - return fmt.Errorf("credential.secret_key is empty, must be set") + } + if c.Credential.AccessKey != "" && c.Credential.SecretKey != "" { + c.Credential.Role = "" // 优先使用密钥,根据 role 是否为空判断使用密钥还是 role + } else if c.Credential.Role == "" { + c.Credential.Role = os.Getenv(EnvServiceRole) + if c.Credential.Role == "" { + return fmt.Errorf("credential.access_key or credential.secret_key or credential.role is empty, must be set") } } + if c.Credential.Region == "" { c.Credential.Region = os.Getenv(EnvRegion) if c.Credential.Region == "" { @@ -288,5 +303,4 @@ func GetStandardNamespaceFromCustomNamespace(cns string) string { } else { panic(fmt.Sprintf("Product not support, namespace=%s, product=%s", cns, pname)) } - } diff --git a/pkg/instance/cache.go b/pkg/instance/cache.go index 4799716..516fa16 100644 --- a/pkg/instance/cache.go +++ b/pkg/instance/cache.go @@ -9,8 +9,8 @@ import ( tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" ) // 可用于产品的实例的缓存, TcInstanceRepository diff --git a/pkg/instance/repository.go b/pkg/instance/repository.go index 15017ad..1db62f7 100644 --- a/pkg/instance/repository.go +++ b/pkg/instance/repository.go @@ -3,12 +3,14 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) var ( - factoryMap = make(map[string]func(*config.TencentConfig, log.Logger) (TcInstanceRepository, error)) + factoryMap = make(map[string]func(common.CredentialIface, *config.TencentConfig, log.Logger) (TcInstanceRepository, error)) ) // 每个产品的实例对象的Repository @@ -23,15 +25,15 @@ type TcInstanceRepository interface { ListByFilters(filters map[string]string) ([]TcInstance, error) } -func NewTcInstanceRepository(namespace string, conf *config.TencentConfig, logger log.Logger) (TcInstanceRepository, error) { +func NewTcInstanceRepository(namespace string, cred common.CredentialIface, conf *config.TencentConfig, logger log.Logger) (TcInstanceRepository, error) { f, exists := factoryMap[namespace] if !exists { return nil, fmt.Errorf("Namespace not support, namespace=%s ", namespace) } - return f(conf, logger) + return f(cred, conf, logger) } // 将TcInstanceRepository注册到factoryMap中 -func registerRepository(namespace string, factory func(*config.TencentConfig, log.Logger) (TcInstanceRepository, error)) { +func registerRepository(namespace string, factory func(common.CredentialIface, *config.TencentConfig, log.Logger) (TcInstanceRepository, error)) { factoryMap[namespace] = factory } diff --git a/pkg/instance/repository_cbs.go b/pkg/instance/repository_cbs.go index bb5f878..e427e0b 100644 --- a/pkg/instance/repository_cbs.go +++ b/pkg/instance/repository_cbs.go @@ -2,10 +2,12 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) @@ -14,9 +16,10 @@ func init() { } type CbsTcInstanceRepository struct { - c *config.TencentConfig - client *sdk.Client - logger log.Logger + credential common.CredentialIface + c *config.TencentConfig + client *sdk.Client + logger log.Logger } func (repo *CbsTcInstanceRepository) GetInstanceKey() string { @@ -78,15 +81,16 @@ getMoreInstances: return } -func NewCbsTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCbsClient(c) +func NewCbsTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCbsClient(cred, c) if err != nil { return } repo = &CbsTcInstanceRepository{ - c: c, - client: cli, - logger: logger, + credential: cred, + c: c, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_cdb.go b/pkg/instance/repository_cdb.go index b52ee99..e7dd5bc 100644 --- a/pkg/instance/repository_cdb.go +++ b/pkg/instance/repository_cdb.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type CdbTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *CdbTcInstanceRepository) GetInstanceKey() string { @@ -79,14 +82,15 @@ getMoreInstances: return } -func NewCdbTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCdbClient(c) +func NewCdbTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCdbClient(cred, c) if err != nil { return } repo = &CdbTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_cdn.go b/pkg/instance/repository_cdn.go index d3772fe..ba4b81e 100644 --- a/pkg/instance/repository_cdn.go +++ b/pkg/instance/repository_cdn.go @@ -2,11 +2,13 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" "github.com/tencentyun/tencentcloud-exporter/pkg/client" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) @@ -79,8 +81,8 @@ getMoreInstances: return } -func NewCdnTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCdnClient(c) +func NewCdnTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCdnClient(cred, c) if err != nil { return } diff --git a/pkg/instance/repository_clb.go b/pkg/instance/repository_clb.go index baeeae5..10cdaae 100644 --- a/pkg/instance/repository_clb.go +++ b/pkg/instance/repository_clb.go @@ -4,8 +4,10 @@ import ( "fmt" "net" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -20,8 +22,9 @@ func init() { var open = "OPEN" type ClbTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *ClbTcInstanceRepository) GetInstanceKey() string { @@ -39,7 +42,6 @@ func (repo *ClbTcInstanceRepository) Get(id string) (instance TcInstance, err er req.LoadBalancerIds = []*string{&id} } req.LoadBalancerType = &open - resp, err := repo.client.DescribeLoadBalancers(req) if err != nil { return @@ -86,6 +88,10 @@ getMoreInstances: level.Error(repo.logger).Log("msg", "Create clb instance fail", "id", *meta.LoadBalancerId) continue } + if meta.LoadBalancerVips == nil || len(meta.LoadBalancerVips) == 0 { + level.Warn(repo.logger).Log("msg", "clb instance no include vip", "id", *meta.LoadBalancerId) + continue + } instances = append(instances, ins) } offset += limit @@ -97,14 +103,15 @@ getMoreInstances: return } -func NewClbTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewClbClient(c) +func NewClbTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewClbClient(cred, c) if err != nil { return } repo = &ClbTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_cmq.go b/pkg/instance/repository_cmq.go index 472bc64..8261769 100644 --- a/pkg/instance/repository_cmq.go +++ b/pkg/instance/repository_cmq.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq/v20190304" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type CMQTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *CMQTcInstanceRepository) GetInstanceKey() string { @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewCMQTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCMQClient(c) +func NewCMQTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCMQClient(cred, c) if err != nil { return } repo = &CMQTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_cmqtopic.go b/pkg/instance/repository_cmqtopic.go index 1ba7c9e..54c4f9e 100644 --- a/pkg/instance/repository_cmqtopic.go +++ b/pkg/instance/repository_cmqtopic.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq/v20190304" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type CMQTopicTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *CMQTopicTcInstanceRepository) GetInstanceKey() string { @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewCMQTopicTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCMQClient(c) +func NewCMQTopicTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCMQClient(cred, c) if err != nil { return } repo = &CMQTopicTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_cos.go b/pkg/instance/repository_cos.go index 3835dcc..be81c00 100644 --- a/pkg/instance/repository_cos.go +++ b/pkg/instance/repository_cos.go @@ -4,11 +4,12 @@ import ( "context" "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentyun/cos-go-sdk-v5" "github.com/tencentyun/tencentcloud-exporter/pkg/client" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) @@ -55,7 +56,7 @@ func (repo *CosTcInstanceRepository) ListByFilters(filters map[string]string) (i // req.Offset = &offset // req.Limit = &limit -// getMoreInstances: + // getMoreInstances: resp, _, err := repo.client.Service.Get(context.Background()) if err != nil { return @@ -77,8 +78,8 @@ func (repo *CosTcInstanceRepository) ListByFilters(filters map[string]string) (i return } -func NewCosTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCosClient(c) +func NewCosTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCosClient(cred, c) if err != nil { return } diff --git a/pkg/instance/repository_cvm.go b/pkg/instance/repository_cvm.go index 4b62811..a9174e1 100644 --- a/pkg/instance/repository_cvm.go +++ b/pkg/instance/repository_cvm.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type CvmTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *CvmTcInstanceRepository) GetInstanceKey() string { @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewCvmTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCvmClient(c) +func NewCvmTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCvmClient(cred, c) if err != nil { return } repo = &CvmTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_cynosdb.go b/pkg/instance/repository_cynosdb.go index 3f89618..eb50a44 100644 --- a/pkg/instance/repository_cynosdb.go +++ b/pkg/instance/repository_cynosdb.go @@ -2,11 +2,13 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" "github.com/tencentyun/tencentcloud-exporter/pkg/client" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) @@ -88,9 +90,8 @@ getMoreInstances: return } - -func NewCynosdbTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewCynosdbClient(c) +func NewCynosdbTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCynosdbClient(cred, c) if err != nil { return } diff --git a/pkg/instance/repository_dc.go b/pkg/instance/repository_dc.go index 6a2db6b..7b9d9b8 100644 --- a/pkg/instance/repository_dc.go +++ b/pkg/instance/repository_dc.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc/v20180410" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type DcTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *DcTcInstanceRepository) GetInstanceKey() string { @@ -79,14 +82,15 @@ getMoreInstances: return } -func NewDcTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewDcClient(c) +func NewDcTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewDcClient(cred, c) if err != nil { return } repo = &DcTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_dcdb.go b/pkg/instance/repository_dcdb.go index c27319d..a5372dd 100644 --- a/pkg/instance/repository_dcdb.go +++ b/pkg/instance/repository_dcdb.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb/v20180411" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type DcdbTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *DcdbTcInstanceRepository) GetInstanceKey() string { @@ -79,14 +82,15 @@ getMoreInstances: return } -func NewDcdbTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewDCDBClient(c) +func NewDcdbTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewDCDBClient(cred, c) if err != nil { return } repo = &DcdbTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_dcx.go b/pkg/instance/repository_dcx.go index f61b6ce..09d89fe 100644 --- a/pkg/instance/repository_dcx.go +++ b/pkg/instance/repository_dcx.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc/v20180410" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type DcxTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *DcxTcInstanceRepository) GetInstanceKey() string { @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewDcxTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewDcClient(c) +func NewDcxTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewDcClient(cred, c) if err != nil { return } repo = &DcxTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_eip.go b/pkg/instance/repository_eip.go index 2188246..33448db 100644 --- a/pkg/instance/repository_eip.go +++ b/pkg/instance/repository_eip.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type EIPTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *EIPTcInstanceRepository) GetInstanceKey() string { @@ -79,14 +82,15 @@ getMoreInstances: return } -func NewEIPTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewVpvClient(c) +func NewEIPTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewVpvClient(cred, c) if err != nil { return } repo = &EIPTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_es.go b/pkg/instance/repository_es.go index 8bd6e49..b494642 100644 --- a/pkg/instance/repository_es.go +++ b/pkg/instance/repository_es.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es/v20180416" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type ESTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *ESTcInstanceRepository) GetInstanceKey() string { @@ -62,7 +65,7 @@ getMoreInstances: if total == 0 { total = *resp.Response.TotalCount } - for _, meta := range resp.Response.InstanceList{ + for _, meta := range resp.Response.InstanceList { ins, e := NewESTcInstance(*meta.InstanceId, meta) if e != nil { level.Error(repo.logger).Log("msg", "Create es instance fail", "id", *meta.InstanceId) @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewESTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewESClient(c) +func NewESTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewESClient(cred, c) if err != nil { return } repo = &ESTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_kafka.go b/pkg/instance/repository_kafka.go index d931668..0f0739c 100644 --- a/pkg/instance/repository_kafka.go +++ b/pkg/instance/repository_kafka.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type KafkaTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *KafkaTcInstanceRepository) GetInstanceKey() string { @@ -62,7 +65,7 @@ getMoreInstances: if total == 0 { total = *resp.Response.Result.TotalCount } - for _, meta := range resp.Response.Result.InstanceList{ + for _, meta := range resp.Response.Result.InstanceList { ins, e := NewKafkaTcInstance(*meta.InstanceId, meta) if e != nil { level.Error(repo.logger).Log("msg", "Create kafka instance fail", "id", *meta.InstanceId) @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewKafkaTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewKafkaClient(c) +func NewKafkaTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewKafkaClient(cred, c) if err != nil { return } repo = &KafkaTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_lighthouse.go b/pkg/instance/repository_lighthouse.go index 433cdad..af0ae28 100644 --- a/pkg/instance/repository_lighthouse.go +++ b/pkg/instance/repository_lighthouse.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse/v20200324" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type LighthouseTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *LighthouseTcInstanceRepository) GetInstanceKey() string { @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewLighthouseTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewLighthouseClient(c) +func NewLighthouseTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewLighthouseClient(cred, c) if err != nil { return } repo = &LighthouseTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_mariadb.go b/pkg/instance/repository_mariadb.go index d38beff..7bf3072 100644 --- a/pkg/instance/repository_mariadb.go +++ b/pkg/instance/repository_mariadb.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type MariaDBTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *MariaDBTcInstanceRepository) GetInstanceKey() string { @@ -62,7 +65,7 @@ getMoreInstances: if total == 0 { total = int64(*resp.Response.TotalCount) } - for _, meta := range resp.Response.Instances{ + for _, meta := range resp.Response.Instances { ins, e := NewMariaDBTcInstance(*meta.InstanceId, meta) if e != nil { level.Error(repo.logger).Log("msg", "Create mariadb instance fail", "id", *meta.InstanceId) @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewMariaDBTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewMariaDBClient(c) +func NewMariaDBTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewMariaDBClient(cred, c) if err != nil { return } repo = &MariaDBTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_memcached.go b/pkg/instance/repository_memcached.go index 4855a9b..60b8972 100644 --- a/pkg/instance/repository_memcached.go +++ b/pkg/instance/repository_memcached.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/memcached/v20190318" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type MemcachedTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *MemcachedTcInstanceRepository) GetInstanceKey() string { @@ -78,14 +81,15 @@ getMoreInstances: return } -func NewMemcachedTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewMemcacheClient(c) +func NewMemcachedTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewMemcacheClient(cred, c) if err != nil { return } repo = &MemcachedTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_mongo.go b/pkg/instance/repository_mongo.go index af383af..d1a2368 100644 --- a/pkg/instance/repository_mongo.go +++ b/pkg/instance/repository_mongo.go @@ -4,8 +4,10 @@ import ( "fmt" "strconv" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -16,8 +18,9 @@ func init() { } type MongoTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *MongoTcInstanceRepository) GetInstanceKey() string { @@ -91,14 +94,15 @@ getMoreInstances: return } -func NewMongoTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewMongodbClient(c) +func NewMongoTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewMongodbClient(cred, c) if err != nil { return } repo = &MongoTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_nacos.go b/pkg/instance/repository_nacos.go index d9c24db..1253863 100644 --- a/pkg/instance/repository_nacos.go +++ b/pkg/instance/repository_nacos.go @@ -2,8 +2,11 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + pkgcommon "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" @@ -98,8 +101,8 @@ func (repo *NacosTcInstancePodRepositoryImpl) GetNacosPodInfo(instanceId string) req.InstanceId = common.StringPtr(instanceId) return repo.client.DescribeNacosReplicas(req) } -func NewNacosTcInstancePodRepository(c *config.TencentConfig, logger log.Logger) (NacosTcInstancePodRepository, error) { - cli, err := client.NewTseClient(c) +func NewNacosTcInstancePodRepository(cred pkgcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (NacosTcInstancePodRepository, error) { + cli, err := client.NewTseClient(cred, c) if err != nil { return nil, err } @@ -125,8 +128,8 @@ func (repo *NacosTcInstanceInterfaceRepositoryImpl) GetNacosInterfaceInfo(instan req.InstanceId = common.StringPtr(instanceId) return repo.client.DescribeNacosServerInterfaces(req) } -func NewNacosTcInstanceInterfaceRepository(c *config.TencentConfig, logger log.Logger) (NacosTcInstanceInterfaceRepository, error) { - cli, err := client.NewTseClient(c) +func NewNacosTcInstanceInterfaceRepository(cred pkgcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (NacosTcInstanceInterfaceRepository, error) { + cli, err := client.NewTseClient(cred, c) if err != nil { return nil, err } @@ -137,8 +140,8 @@ func NewNacosTcInstanceInterfaceRepository(c *config.TencentConfig, logger log.L return repo, nil } -func NewNaocsTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewTseClient(c) +func NewNaocsTcInstanceRepository(cred pkgcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewTseClient(cred, c) if err != nil { return } diff --git a/pkg/instance/repository_nat.go b/pkg/instance/repository_nat.go index 720b16b..1f6a665 100644 --- a/pkg/instance/repository_nat.go +++ b/pkg/instance/repository_nat.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" @@ -15,8 +17,9 @@ func init() { } type NatTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *NatTcInstanceRepository) GetInstanceKey() string { @@ -77,14 +80,15 @@ getMoreInstances: return } -func NewNatTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewVpvClient(c) +func NewNatTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewVpvClient(cred, c) if err != nil { return } repo = &NatTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_pg.go b/pkg/instance/repository_pg.go index 7803a62..6c51385 100644 --- a/pkg/instance/repository_pg.go +++ b/pkg/instance/repository_pg.go @@ -3,22 +3,25 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) -var idKey = "db-instance-id" +var idKey = "db-instance-id" func init() { registerRepository("QCE/POSTGRES", NewPGTcInstanceRepository) } type PGTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *PGTcInstanceRepository) GetInstanceKey() string { @@ -27,8 +30,8 @@ func (repo *PGTcInstanceRepository) GetInstanceKey() string { func (repo *PGTcInstanceRepository) Get(id string) (instance TcInstance, err error) { req := sdk.NewDescribeDBInstancesRequest() - req.Filters =[]*sdk.Filter{{ - Name: &idKey, + req.Filters = []*sdk.Filter{{ + Name: &idKey, Values: []*string{&id}, }} resp, err := repo.client.DescribeDBInstances(req) @@ -67,7 +70,7 @@ getMoreInstances: if total == 0 { total = *resp.Response.TotalCount } - for _, meta := range resp.Response.DBInstanceSet{ + for _, meta := range resp.Response.DBInstanceSet { ins, e := NewPGTcInstance(*meta.DBInstanceId, meta) if e != nil { level.Error(repo.logger).Log("msg", "Create pg instance fail", "id", *meta.DBInstanceId) @@ -83,14 +86,15 @@ getMoreInstances: return } -func NewPGTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewPGClient(c) +func NewPGTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewPGClient(cred, c) if err != nil { return } repo = &PGTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_redis.go b/pkg/instance/repository_redis.go index 43dee03..df2b710 100644 --- a/pkg/instance/repository_redis.go +++ b/pkg/instance/repository_redis.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + mycommon "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" "github.com/tencentyun/tencentcloud-exporter/pkg/client" @@ -19,18 +21,20 @@ func init() { } type RedisTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential mycommon.CredentialIface + client *sdk.Client + logger log.Logger } -func NewRedisTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewRedisClient(c) +func NewRedisTcInstanceRepository(cred mycommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewRedisClient(cred, c) if err != nil { return } repo = &RedisTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } @@ -100,8 +104,9 @@ type RedisTcInstanceNodeRepository interface { } type RedisTcInstanceNodeRepositoryImpl struct { - client *sdk.Client - logger log.Logger + credential mycommon.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *RedisTcInstanceNodeRepositoryImpl) GetNodeInfo(instanceId string) (*sdk.DescribeInstanceNodeInfoResponse, error) { @@ -110,14 +115,15 @@ func (repo *RedisTcInstanceNodeRepositoryImpl) GetNodeInfo(instanceId string) (* return repo.client.DescribeInstanceNodeInfo(req) } -func NewRedisTcInstanceNodeRepository(c *config.TencentConfig, logger log.Logger) (RedisTcInstanceNodeRepository, error) { - cli, err := client.NewRedisClient(c) +func NewRedisTcInstanceNodeRepository(cred mycommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (RedisTcInstanceNodeRepository, error) { + cli, err := client.NewRedisClient(cred, c) if err != nil { return nil, err } repo := &RedisTcInstanceNodeRepositoryImpl{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return repo, nil } diff --git a/pkg/instance/repository_sqlserver.go b/pkg/instance/repository_sqlserver.go index 1daf88e..622eb81 100644 --- a/pkg/instance/repository_sqlserver.go +++ b/pkg/instance/repository_sqlserver.go @@ -3,8 +3,10 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" "github.com/tencentyun/tencentcloud-exporter/pkg/client" @@ -16,8 +18,9 @@ func init() { } type SqlServerTcInstanceRepository struct { - client *sdk.Client - logger log.Logger + credential common.CredentialIface + client *sdk.Client + logger log.Logger } func (repo *SqlServerTcInstanceRepository) GetInstanceKey() string { @@ -80,14 +83,15 @@ getMoreInstances: return } -func NewSqlServerTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewSqlServerClient(c) +func NewSqlServerTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewSqlServerClient(cred, c) if err != nil { return } repo = &SqlServerTcInstanceRepository{ - client: cli, - logger: logger, + credential: cred, + client: cli, + logger: logger, } return } diff --git a/pkg/instance/repository_tdmq.go b/pkg/instance/repository_tdmq.go index 838add7..c39c7a0 100644 --- a/pkg/instance/repository_tdmq.go +++ b/pkg/instance/repository_tdmq.go @@ -2,10 +2,12 @@ package instance import ( "fmt" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + selfcommon "github.com/tencentyun/tencentcloud-exporter/pkg/common" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" "github.com/tencentyun/tencentcloud-exporter/pkg/client" @@ -101,8 +103,8 @@ func (repo *TdmqTcInstanceRocketMQNameSpacesRepositoryImpl) GetRocketMQNamespace return repo.client.DescribeRocketMQNamespaces(req) } -func NewTdmqTcInstanceRocketMQNameSpacesRepository(c *config.TencentConfig, logger log.Logger) (TdmqTcInstanceRocketMQNameSpacesRepository, error) { - cli, err := client.NewTDMQClient(c) +func NewTdmqTcInstanceRocketMQNameSpacesRepository(cred selfcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (TdmqTcInstanceRocketMQNameSpacesRepository, error) { + cli, err := client.NewTDMQClient(cred, c) if err != nil { return nil, err } @@ -134,8 +136,8 @@ func (repo *TdmqTcInstanceRocketMQTopicsRepositoryImpl) GetRocketMQTopicsInfo(in return repo.client.DescribeRocketMQTopics(req) } -func NewTdmqTcInstanceRocketMQTopicsRepository(c *config.TencentConfig, logger log.Logger) (TdmqTcInstanceRocketMQTopicsRepository, error) { - cli, err := client.NewTDMQClient(c) +func NewTdmqTcInstanceRocketMQTopicsRepository(cred selfcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (TdmqTcInstanceRocketMQTopicsRepository, error) { + cli, err := client.NewTDMQClient(cred, c) if err != nil { return nil, err } @@ -146,8 +148,8 @@ func NewTdmqTcInstanceRocketMQTopicsRepository(c *config.TencentConfig, logger l return repo, nil } -func NewTdmqTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewTDMQClient(c) +func NewTdmqTcInstanceRepository(cred selfcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewTDMQClient(cred, c) if err != nil { return } diff --git a/pkg/instance/repository_vpngw.go b/pkg/instance/repository_vpngw.go index ca3347f..837bb55 100644 --- a/pkg/instance/repository_vpngw.go +++ b/pkg/instance/repository_vpngw.go @@ -3,11 +3,12 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) @@ -80,8 +81,8 @@ getMoreInstances: return } -func NewVpngwTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewVpvClient(c) +func NewVpngwTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewVpvClient(cred, c) if err != nil { return } diff --git a/pkg/instance/repository_vpnx.go b/pkg/instance/repository_vpnx.go index 55dfc88..bd6c38b 100644 --- a/pkg/instance/repository_vpnx.go +++ b/pkg/instance/repository_vpnx.go @@ -3,11 +3,12 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" "github.com/tencentyun/tencentcloud-exporter/pkg/client" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) @@ -80,8 +81,8 @@ getMoreInstances: return } -func NewVpnxTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewVpvClient(c) +func NewVpnxTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewVpvClient(cred, c) if err != nil { return } diff --git a/pkg/instance/repository_zookeeper.go b/pkg/instance/repository_zookeeper.go index 2accdf2..b052ec6 100644 --- a/pkg/instance/repository_zookeeper.go +++ b/pkg/instance/repository_zookeeper.go @@ -2,12 +2,14 @@ package instance import ( "fmt" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" "github.com/tencentyun/tencentcloud-exporter/pkg/client" + pkgcommon "github.com/tencentyun/tencentcloud-exporter/pkg/common" "github.com/tencentyun/tencentcloud-exporter/pkg/config" ) @@ -98,8 +100,8 @@ func (repo *ZookeeperTcInstancePodRepositoryImpl) GetZookeeperPodInfo(instanceId req.InstanceId = common.StringPtr(instanceId) return repo.client.DescribeZookeeperReplicas(req) } -func NewZookeeperTcInstancePodRepository(c *config.TencentConfig, logger log.Logger) (ZookeeperTcInstancePodRepository, error) { - cli, err := client.NewTseClient(c) +func NewZookeeperTcInstancePodRepository(cred pkgcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (ZookeeperTcInstancePodRepository, error) { + cli, err := client.NewTseClient(cred, c) if err != nil { return nil, err } @@ -125,8 +127,8 @@ func (repo *ZookeeperTcInstanceInterfaceRepositoryImpl) GetZookeeperInterfaceInf req.InstanceId = common.StringPtr(instanceId) return repo.client.DescribeZookeeperServerInterfaces(req) } -func NewZookeeperTcInstanceInterfaceRepository(c *config.TencentConfig, logger log.Logger) (ZookeeperTcInstanceInterfaceRepository, error) { - cli, err := client.NewTseClient(c) +func NewZookeeperTcInstanceInterfaceRepository(cred pkgcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (ZookeeperTcInstanceInterfaceRepository, error) { + cli, err := client.NewTseClient(cred, c) if err != nil { return nil, err } @@ -137,8 +139,8 @@ func NewZookeeperTcInstanceInterfaceRepository(c *config.TencentConfig, logger l return repo, nil } -func NewZookeeperTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { - cli, err := client.NewTseClient(c) +func NewZookeeperTcInstanceRepository(cred pkgcommon.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewTseClient(cred, c) if err != nil { return } diff --git a/pkg/metric/cache.go b/pkg/metric/cache.go index 9e35f74..d3f0653 100644 --- a/pkg/metric/cache.go +++ b/pkg/metric/cache.go @@ -5,8 +5,8 @@ import ( "strings" "time" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/go-kit/log" + "github.com/go-kit/log/level" ) // 腾讯云监控指标缓存, 在TcmMetricRepository封装一层, 指标元数据使用缓存, 转发获取数据点请求 diff --git a/pkg/metric/repository.go b/pkg/metric/repository.go index 8ab9b03..0a68bcb 100644 --- a/pkg/metric/repository.go +++ b/pkg/metric/repository.go @@ -5,8 +5,10 @@ import ( "fmt" "time" - "github.com/go-kit/kit/log" - "github.com/go-kit/kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" "golang.org/x/time/rate" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" @@ -31,6 +33,7 @@ type TcmMetricRepository interface { } type TcmMetricRepositoryImpl struct { + credential common.CredentialIface monitorClient *monitor.Client limiter *rate.Limiter // 限速 ctx context.Context @@ -70,6 +73,7 @@ func (repo *TcmMetricRepositoryImpl) ListMetaByNamespace(namespace string) (meta // 限速 ctx, cancel := context.WithCancel(repo.ctx) defer cancel() + err = repo.limiter.Wait(ctx) if err != nil { return @@ -254,13 +258,14 @@ func (repo *TcmMetricRepositoryImpl) buildSamples( return samples, ql, nil } -func NewTcmMetricRepository(conf *config.TencentConfig, logger log.Logger) (repo TcmMetricRepository, err error) { - monitorClient, err := client.NewMonitorClient(conf) +func NewTcmMetricRepository(cred common.CredentialIface, conf *config.TencentConfig, logger log.Logger) (repo TcmMetricRepository, err error) { + monitorClient, err := client.NewMonitorClient(cred, conf) if err != nil { return } repo = &TcmMetricRepositoryImpl{ + credential: cred, monitorClient: monitorClient, limiter: rate.NewLimiter(rate.Limit(conf.RateLimit), 1), ctx: context.Background(),