From 2457d95262ec4d3ccde6a6925a16eedf675500f4 Mon Sep 17 00:00:00 2001
From: Nathan Haneysmith <nathan@chef.io>
Date: Thu, 25 Aug 2016 17:46:38 -0700
Subject: [PATCH] Move CloudWatch rate limit to config Reference #1670

---
 plugins/inputs/cloudwatch/README.md     |  5 +++++
 plugins/inputs/cloudwatch/cloudwatch.go | 13 +++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/plugins/inputs/cloudwatch/README.md b/plugins/inputs/cloudwatch/README.md
index df62e62b..28d2a295 100644
--- a/plugins/inputs/cloudwatch/README.md
+++ b/plugins/inputs/cloudwatch/README.md
@@ -34,6 +34,11 @@ API endpoint. In the following order the plugin will attempt to authenticate.
   ## Metric Statistic Namespace (required)
   namespace = 'AWS/ELB'
 
+  ## Maximum requests per second. Note that the global default AWS rate limit is
+  ## 10 reqs/sec, so if you define multiple namespaces, these should add up to a
+  ## maximum of 10.
+  ratelimit = 10
+
   ## Metrics to Pull (optional)
   ## Defaults to all Metrics in Namespace if nothing is provided
   ## Refreshes Namespace available metrics every 1h
diff --git a/plugins/inputs/cloudwatch/cloudwatch.go b/plugins/inputs/cloudwatch/cloudwatch.go
index f3019eb4..2b6642b2 100644
--- a/plugins/inputs/cloudwatch/cloudwatch.go
+++ b/plugins/inputs/cloudwatch/cloudwatch.go
@@ -28,11 +28,12 @@ type (
 		Filename  string `toml:"shared_credential_file"`
 		Token     string `toml:"token"`
 
-		Period      internal.Duration `toml:"period"`
-		Delay       internal.Duration `toml:"delay"`
-		Namespace   string            `toml:"namespace"`
-		Metrics     []*Metric         `toml:"metrics"`
-		CacheTTL    internal.Duration `toml:"cache_ttl"`
+		Period      internal.Duration  `toml:"period"`
+		Delay       internal.Duration  `toml:"delay"`
+		Namespace   string             `toml:"namespace"`
+		Metrics     []*Metric          `toml:"metrics"`
+		CacheTTL    internal.Duration  `toml:"cache_ttl"`
+		RateLimit   internal.RateLimit `toml:"ratelimit"`
 		client      cloudwatchClient
 		metricCache *MetricCache
 	}
@@ -175,7 +176,7 @@ func (c *CloudWatch) Gather(acc telegraf.Accumulator) error {
 	// limit concurrency or we can easily exhaust user connection limit
 	// see cloudwatch API request limits:
 	// http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_limits.html
-	lmtr := limiter.NewRateLimiter(10, time.Second)
+	lmtr := limiter.NewRateLimiter(c.RateLimit, time.Second)
 	defer lmtr.Stop()
 	var wg sync.WaitGroup
 	wg.Add(len(metrics))
-- 
GitLab