Skip to content

Commit

Permalink
Limit GetMetricStatistics to 10 per second
Browse files Browse the repository at this point in the history
closes #1197
  • Loading branch information
sparrc committed May 26, 2016
1 parent 42d7fc5 commit 56e7727
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions plugins/inputs/cloudwatch/cloudwatch.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,9 @@ func (c *CloudWatch) Gather(acc telegraf.Accumulator) error {
now := time.Now()

// limit concurrency or we can easily exhaust user connection limit
semaphore := make(chan byte, 64)

// see cloudwatch API request limits:
// http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_limits.html
semaphore := make(chan byte, 5)
for _, m := range metrics {
semaphore <- 0x1
go c.gatherMetric(acc, m, now, semaphore, errChan)
Expand Down Expand Up @@ -257,12 +258,18 @@ func (c *CloudWatch) fetchNamespaceMetrics() (metrics []*cloudwatch.Metric, err
/*
* Gather given Metric and emit any error
*/
func (c *CloudWatch) gatherMetric(acc telegraf.Accumulator, metric *cloudwatch.Metric, now time.Time, semaphore chan byte, errChan chan error) {
func (c *CloudWatch) gatherMetric(
acc telegraf.Accumulator,
metric *cloudwatch.Metric,
now time.Time,
semaphore chan byte,
errChan chan error,
) {
defer func() { <-semaphore }()
params := c.getStatisticsInput(metric, now)
resp, err := c.client.GetMetricStatistics(params)
if err != nil {
errChan <- err
<-semaphore
return
}

Expand Down Expand Up @@ -299,7 +306,6 @@ func (c *CloudWatch) gatherMetric(acc telegraf.Accumulator, metric *cloudwatch.M
}

errChan <- nil
<-semaphore
}

/*
Expand Down

0 comments on commit 56e7727

Please sign in to comment.