diff --git a/.gitignore b/.gitignore index 2a21cb8..d905a9f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ /pkg/ /spec/reports/ /tmp/ +/.idea/ # rspec failure tracking .rspec_status diff --git a/README.md b/README.md index 81301c3..f9c8372 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ PUMA\_CLOUDWATCH\_AWS\_REGION | CloudWatch metric AWS region | (unset) PUMA\_CLOUDWATCH\_AWS\_ACCESS_KEY_ID | AWS access key ID | (unset) PUMA\_CLOUDWATCH\_AWS\_SECRET_ACCESS_KEY | AWS secret access key | (unset) PUMA\_CLOUDWATCH\_MUTE\_START\_MESSAGE | Mutes the "puma-cloudwatch plugin" startup message | (unset) +PUMA\_CLOUDWATCH\_ENVIRONMENT | CloudWatch environment dimension value | (Puma servers environment) ### Sum and Frequency Normalization diff --git a/lib/puma_cloudwatch/metrics.rb b/lib/puma_cloudwatch/metrics.rb index 95f8c26..465873e 100644 --- a/lib/puma_cloudwatch/metrics.rb +++ b/lib/puma_cloudwatch/metrics.rb @@ -17,4 +17,4 @@ def start_sending Looper.run(@launcher.options) end end -end \ No newline at end of file +end diff --git a/lib/puma_cloudwatch/metrics/looper.rb b/lib/puma_cloudwatch/metrics/looper.rb index 7c08282..dab7000 100644 --- a/lib/puma_cloudwatch/metrics/looper.rb +++ b/lib/puma_cloudwatch/metrics/looper.rb @@ -37,7 +37,7 @@ def perform stats = Fetcher.new(@options).call @fetched = true results = Parser.new(stats).call - Sender.new(results).call unless results.empty? + Sender.new(results, @options[:environment]).call unless results.empty? sleep @frequency rescue Exception => e if @fetched diff --git a/lib/puma_cloudwatch/metrics/sender.rb b/lib/puma_cloudwatch/metrics/sender.rb index 5dc7e74..c15968f 100644 --- a/lib/puma_cloudwatch/metrics/sender.rb +++ b/lib/puma_cloudwatch/metrics/sender.rb @@ -11,7 +11,7 @@ # class PumaCloudwatch::Metrics class Sender - def initialize(metrics) + def initialize(metrics, environment) @metrics = metrics @namespace = ENV['PUMA_CLOUDWATCH_NAMESPACE'] || "WebServer" @dimension_name = ENV['PUMA_CLOUDWATCH_DIMENSION_NAME'] || "App" @@ -21,6 +21,7 @@ def initialize(metrics) @region = ENV['PUMA_CLOUDWATCH_AWS_REGION'] @access_key_id = ENV['PUMA_CLOUDWATCH_AWS_ACCESS_KEY_ID'] @secret_access_key = ENV['PUMA_CLOUDWATCH_AWS_SECRET_ACCESS_KEY'] + @environment = ENV['PUMA_CLOUDWATCH_ENVIRONMENT'] || environment end def call @@ -74,8 +75,8 @@ def metric_data def dimensions [ - name: @dimension_name, - value: @dimension_value + { name: @dimension_name, value: @dimension_value }, + { name: 'environment', value: @environment } ] end diff --git a/spec/puma_cloudwatch/metrics/fetcher_spec.rb b/spec/puma_cloudwatch/metrics/fetcher_spec.rb index 39c062d..0f9ae4e 100644 --- a/spec/puma_cloudwatch/metrics/fetcher_spec.rb +++ b/spec/puma_cloudwatch/metrics/fetcher_spec.rb @@ -1,5 +1,5 @@ RSpec.describe PumaCloudwatch::Metrics::Fetcher do - subject(:fetcher) { described_class.new(control_url: '', control_auth_token: '') } + subject(:fetcher) { described_class.new(control_url: 'unix://', control_auth_token: '') } describe "fetcher" do it "call" do diff --git a/spec/puma_cloudwatch/metrics/sender_spec.rb b/spec/puma_cloudwatch/metrics/sender_spec.rb index fb6c1a8..aaa3a34 100644 --- a/spec/puma_cloudwatch/metrics/sender_spec.rb +++ b/spec/puma_cloudwatch/metrics/sender_spec.rb @@ -1,5 +1,5 @@ RSpec.describe PumaCloudwatch::Metrics::Sender do - subject(:sender) { described_class.new(metrics) } + subject(:sender) { described_class.new(metrics, 'development') } context "single mode" do context "metrics filled out" do @@ -14,17 +14,21 @@ data = sender.metric_data expect(data).to eq( [{:metric_name=>"backlog", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>1, :sum=>0, :minimum=>0, :maximum=>0}}, + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>1, :sum=>0, :minimum=>0, :maximum=>0}, + :storage_resolution=>60}, {:metric_name=>"running", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>1, :sum=>16, :minimum=>16, :maximum=>16}}, + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>1, :sum=>16, :minimum=>16, :maximum=>16}, + :storage_resolution=>60}, {:metric_name=>"pool_capacity", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>1, :sum=>8, :minimum=>8, :maximum=>8}}, + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>1, :sum=>8, :minimum=>8, :maximum=>8}, + :storage_resolution=>60}, {:metric_name=>"max_threads", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>1, :sum=>16, :minimum=>16, :maximum=>16}}] + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>1, :sum=>16, :minimum=>16, :maximum=>16}, + :storage_resolution=>60}] ) end @@ -49,17 +53,21 @@ data = sender.metric_data expect(data).to eq( [{:metric_name=>"backlog", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>2, :sum=>0, :minimum=>0, :maximum=>0}}, + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>2, :sum=>0, :minimum=>0, :maximum=>0}, + :storage_resolution=>60}, {:metric_name=>"running", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>2, :sum=>0, :minimum=>0, :maximum=>0}}, + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>2, :sum=>0, :minimum=>0, :maximum=>0}, + :storage_resolution=>60}, {:metric_name=>"pool_capacity", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>2, :sum=>32, :minimum=>16, :maximum=>16}}, + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>2, :sum=>32, :minimum=>16, :maximum=>16}, + :storage_resolution=>60}, {:metric_name=>"max_threads", - :dimensions=>[{:name=>"App", :value=>"demo-puma"}], - :statistic_values=>{:sample_count=>2, :sum=>32, :minimum=>16, :maximum=>16}}] + :dimensions=>[{:name=>"App", :value=>"puma"}, {:name=>"environment", :value=>"development"}], + :statistic_values=>{:sample_count=>2, :sum=>32, :minimum=>16, :maximum=>16}, + :storage_resolution=>60}] ) end