@@ -8,16 +8,20 @@ import (
88 "sync"
99 "time"
1010
11- "github.com/aws/aws-sdk-go/aws"
12- "github.com/aws/aws-sdk-go/service/cloudwatch"
13- "github.com/aws/aws-sdk-go/service/cloudwatch/cloudwatchiface "
11+ "github.com/aws/aws-sdk-go-v2 /aws"
12+ "github.com/aws/aws-sdk-go-v2 /service/cloudwatch"
13+ "github.com/aws/aws-sdk-go-v2 /service/cloudwatch/types "
1414
1515 "github.com/go-kit/kit/metrics"
1616 "github.com/go-kit/kit/metrics/generic"
1717 "github.com/go-kit/kit/metrics/internal/lv"
1818 "github.com/go-kit/log"
1919)
2020
21+ type CloudWatchAPI interface {
22+ PutMetricData (context.Context , * cloudwatch.PutMetricDataInput ) (* cloudwatch.PutMetricDataOutput , error )
23+ }
24+
2125const (
2226 maxConcurrentRequests = 20
2327 maxValuesInABatch = 150
@@ -32,7 +36,7 @@ type CloudWatch struct {
3236 mtx sync.RWMutex
3337 sem chan struct {}
3438 namespace string
35- svc cloudwatchiface. CloudWatchAPI
39+ svc CloudWatchAPI
3640 counters * lv.Space
3741 gauges * lv.Space
3842 histograms * lv.Space
@@ -85,7 +89,7 @@ func WithConcurrentRequests(n int) Option {
8589// Namespace is applied to all created metrics and maps to the CloudWatch namespace.
8690// Callers must ensure that regular calls to Send are performed, either
8791// manually or with one of the helper methods.
88- func New (namespace string , svc cloudwatchiface. CloudWatchAPI , options ... Option ) * CloudWatch {
92+ func New (namespace string , svc CloudWatchAPI , options ... Option ) * CloudWatch {
8993 cw := & CloudWatch {
9094 sem : nil , // set below
9195 namespace : namespace ,
@@ -157,11 +161,11 @@ func (cw *CloudWatch) Send() error {
157161 defer cw .mtx .RUnlock ()
158162 now := time .Now ()
159163
160- var datums []* cloudwatch .MetricDatum
164+ var datums []types .MetricDatum
161165
162166 cw .counters .Reset ().Walk (func (name string , lvs lv.LabelValues , values []float64 ) bool {
163167 value := sum (values )
164- datums = append (datums , & cloudwatch .MetricDatum {
168+ datums = append (datums , types .MetricDatum {
165169 MetricName : aws .String (name ),
166170 Dimensions : makeDimensions (lvs ... ),
167171 Value : aws .Float64 (value ),
@@ -175,7 +179,7 @@ func (cw *CloudWatch) Send() error {
175179 return true
176180 }
177181
178- datum := & cloudwatch .MetricDatum {
182+ datum := types .MetricDatum {
179183 MetricName : aws .String (name ),
180184 Dimensions : makeDimensions (lvs ... ),
181185 Timestamp : aws .Time (now ),
@@ -192,8 +196,8 @@ func (cw *CloudWatch) Send() error {
192196 if len (datum .Values ) == maxValuesInABatch {
193197 break
194198 }
195- datum .Values = append (datum .Values , aws . Float64 ( value ) )
196- datum .Counts = append (datum .Counts , aws . Float64 ( float64 (count ) ))
199+ datum .Values = append (datum .Values , value )
200+ datum .Counts = append (datum .Counts , float64 (count ))
197201 }
198202
199203 datums = append (datums , datum )
@@ -217,7 +221,7 @@ func (cw *CloudWatch) Send() error {
217221
218222 for _ , perc := range cw .percentiles {
219223 value := histogram .Quantile (perc )
220- datums = append (datums , & cloudwatch .MetricDatum {
224+ datums = append (datums , types .MetricDatum {
221225 MetricName : aws .String (fmt .Sprintf ("%s_%s" , name , formatPerc (perc ))),
222226 Dimensions : makeDimensions (lvs ... ),
223227 Value : aws .Float64 (value ),
@@ -227,22 +231,24 @@ func (cw *CloudWatch) Send() error {
227231 return true
228232 })
229233
230- var batches [][]* cloudwatch .MetricDatum
234+ var batches [][]types .MetricDatum
231235 for len (datums ) > 0 {
232- var batch []* cloudwatch .MetricDatum
236+ var batch []types .MetricDatum
233237 lim := min (len (datums ), maxConcurrentRequests )
234238 batch , datums = datums [:lim ], datums [lim :]
235239 batches = append (batches , batch )
236240 }
237241
238242 var errors = make (chan error , len (batches ))
239243 for _ , batch := range batches {
240- go func (batch []* cloudwatch .MetricDatum ) {
244+ go func (batch []types .MetricDatum ) {
241245 cw .sem <- struct {}{}
242246 defer func () {
243247 <- cw .sem
244248 }()
245- _ , err := cw .svc .PutMetricData (& cloudwatch.PutMetricDataInput {
249+
250+ // using TODO context, should be passed in ideally
251+ _ , err := cw .svc .PutMetricData (context .TODO (), & cloudwatch.PutMetricDataInput {
246252 Namespace : aws .String (cw .namespace ),
247253 MetricData : batch ,
248254 })
@@ -349,10 +355,10 @@ func (h *Histogram) Observe(value float64) {
349355 h .obs (h .name , h .lvs , value )
350356}
351357
352- func makeDimensions (labelValues ... string ) []* cloudwatch .Dimension {
353- dimensions := make ([]* cloudwatch .Dimension , len (labelValues )/ 2 )
358+ func makeDimensions (labelValues ... string ) []types .Dimension {
359+ dimensions := make ([]types .Dimension , len (labelValues )/ 2 )
354360 for i , j := 0 , 0 ; i < len (labelValues ); i , j = i + 2 , j + 1 {
355- dimensions [j ] = & cloudwatch .Dimension {
361+ dimensions [j ] = types .Dimension {
356362 Name : aws .String (labelValues [i ]),
357363 Value : aws .String (labelValues [i + 1 ]),
358364 }
0 commit comments