puma-cloudwatch 0.5.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 310c3534fa2d00a6da76f26f6cbe908ac842ced68f02d49fb0ff4f7d0922e95b
4
- data.tar.gz: 0ef2173e64a9517866be68af190256529184f40aacb6830c0f93960203dc2919
3
+ metadata.gz: ef9ffddc149af0d9bfbd27b26a36e81950f3744ec4111e56ff10f94d824133b0
4
+ data.tar.gz: a472a1792d0c98daaf40dbc58f6642d630963d5947c496fe7831056913390064
5
5
  SHA512:
6
- metadata.gz: 44a1e9b69e28968779ed60237c102a21e8d1bb3729a6ee5f013932efab906f00f723694b004e585f6b285db6ffadd2f1c1c935ba4d2a0eaff78fbf434ef52604
7
- data.tar.gz: 21f44b53b79331912008bec96ac4c27b3903d16d21f79ae22ee4259ae8a8ba25fa16d79b5d4724ac9be2818097743ccc9abb65a209a344b502c32747626ef019
6
+ metadata.gz: b083ddc6806fd2cd94c25870aa8318cced2cb62d8f8cf0fbfdf09196812221a84904b97813dd533f965a9afb1233632c18dd57c25c4a545b260a8b928c0f7278
7
+ data.tar.gz: 6c2af8d7dacd031777e4f75c993842cb94d5c51f1bf96190a9c7bd88de342e8bbdad417da9fb74fa28646edfa88432ef53f71acba9762f8f7c90a96bdbd54f90
data/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [0.5.2] - 2024-10-11
7
+ - [#16](https://github.com/tongueroo/puma-cloudwatch/pull/16) feat: permit multiple metric dimensions
8
+
9
+ ## [0.5.1] - 2023-11-13
10
+ - [#13](https://github.com/tongueroo/puma-cloudwatch/pull/13) delay error messages until first successful fetch
11
+
6
12
  ## [0.5.0] - 2023-07-11
7
13
  - [#11](https://github.com/tongueroo/puma-cloudwatch/pull/11) Added support for PUMA_CLOUDWATCH_AWS_ACCESS_KEY_ID and PUMA_CLOUDWATCH_AWS_SECRET_ACCESS_KEY env vars to configure an AWS access key
8
14
  - [#12](https://github.com/tongueroo/puma-cloudwatch/pull/12) http tcp port support also
data/README.md CHANGED
@@ -14,6 +14,10 @@ It also strongly encourage to set the `PUMA_CLOUDWATCH_DIMENSION_VALUE` env vari
14
14
 
15
15
  PUMA_CLOUDWATCH_DIMENSION_VALUE=demo-web-puma
16
16
 
17
+ Or if you need to set multiple dimensions, you could use something like:
18
+
19
+ PUMA_CLOUDWATCH_DIMENSIONS="Service=web,Cluster=primary,Environment=production"
20
+
17
21
  Then you can get metrics for your `demo-web-puma` app. List of metrics:
18
22
 
19
23
  * pool_capacity: the number of requests that the server is capable of taking right now.
@@ -34,6 +38,7 @@ Env Var | Description | Default Value
34
38
  PUMA\_CLOUDWATCH\_DEBUG | When set, the plugin prints out the metrics that get sent to CloudWatch. | (unset)
35
39
  PUMA\_CLOUDWATCH\_DIMENSION\_NAME | CloudWatch metric dimension name | App
36
40
  PUMA\_CLOUDWATCH\_DIMENSION\_VALUE | CloudWatch metric dimension value | puma
41
+ PUMA\_CLOUDWATCH\_DIMENSIONS | CloudWatch metric dimensions | (unset)
37
42
  PUMA\_CLOUDWATCH\_ENABLED | Enables sending of the data to CloudWatch. | (unset)
38
43
  PUMA\_CLOUDWATCH\_FREQUENCY | How often to send data to CloudWatch in seconds. | 60
39
44
  PUMA\_CLOUDWATCH\_NAMESPACE | CloudWatch metric namespace | WebServer
@@ -10,6 +10,7 @@ class PumaCloudwatch::Metrics
10
10
  @control_auth_token = options[:control_auth_token]
11
11
  @frequency = Integer(ENV['PUMA_CLOUDWATCH_FREQUENCY'] || 60)
12
12
  @enabled = ENV['PUMA_CLOUDWATCH_ENABLED'] || false
13
+ @fetched = false
13
14
  end
14
15
 
15
16
  def run
@@ -34,11 +35,17 @@ class PumaCloudwatch::Metrics
34
35
  loop do
35
36
  begin
36
37
  stats = Fetcher.new(@options).call
38
+ @fetched = true
37
39
  results = Parser.new(stats).call
38
40
  Sender.new(results).call unless results.empty?
39
41
  sleep @frequency
40
42
  rescue Exception => e
41
- puts "Error reached top of looper: #{e.message} (#{e.class})"
43
+ if @fetched
44
+ puts "Error reached top of looper: #{e.message} (#{e.class})"
45
+ else
46
+ # sleep and don't error until we've successfully fetched
47
+ sleep @frequency
48
+ end
42
49
  end
43
50
  end
44
51
  end
@@ -14,8 +14,7 @@ class PumaCloudwatch::Metrics
14
14
  def initialize(metrics)
15
15
  @metrics = metrics
16
16
  @namespace = ENV['PUMA_CLOUDWATCH_NAMESPACE'] || "WebServer"
17
- @dimension_name = ENV['PUMA_CLOUDWATCH_DIMENSION_NAME'] || "App"
18
- @dimension_value = ENV['PUMA_CLOUDWATCH_DIMENSION_VALUE'] || "puma"
17
+ @dimensions = calculate_dimensions
19
18
  @frequency = Integer(ENV['PUMA_CLOUDWATCH_FREQUENCY'] || 60)
20
19
  @enabled = ENV['PUMA_CLOUDWATCH_ENABLED'] || false
21
20
  @region = ENV['PUMA_CLOUDWATCH_AWS_REGION']
@@ -23,6 +22,27 @@ class PumaCloudwatch::Metrics
23
22
  @secret_access_key = ENV['PUMA_CLOUDWATCH_AWS_SECRET_ACCESS_KEY']
24
23
  end
25
24
 
25
+ def calculate_dimensions
26
+ if ENV.key?('PUMA_CLOUDWATCH_DIMENSIONS')
27
+ ENV['PUMA_CLOUDWATCH_DIMENSIONS'].split(',').map(&:strip).map do |dimension|
28
+ name, value = dimension.split('=').map(&:strip)
29
+
30
+ {
31
+ name: name,
32
+ value: value,
33
+ }
34
+ end
35
+ else
36
+ name = ENV['PUMA_CLOUDWATCH_DIMENSION_NAME'] || "App"
37
+ value = ENV['PUMA_CLOUDWATCH_DIMENSION_VALUE'] || "puma"
38
+
39
+ [
40
+ name: name,
41
+ value: value
42
+ ]
43
+ end
44
+ end
45
+
26
46
  def call
27
47
  put_metric_data(
28
48
  namespace: @namespace,
@@ -58,7 +78,7 @@ class PumaCloudwatch::Metrics
58
78
  metric.each do |name, values|
59
79
  data << {
60
80
  metric_name: name.to_s,
61
- dimensions: dimensions,
81
+ dimensions: @dimensions,
62
82
  storage_resolution: @frequency < 60 ? 1 : 60,
63
83
  statistic_values: {
64
84
  sample_count: values.length,
@@ -72,13 +92,6 @@ class PumaCloudwatch::Metrics
72
92
  data
73
93
  end
74
94
 
75
- def dimensions
76
- [
77
- name: @dimension_name,
78
- value: @dimension_value
79
- ]
80
- end
81
-
82
95
  private
83
96
  def put_metric_data(params)
84
97
  if ENV['PUMA_CLOUDWATCH_DEBUG']
@@ -1,3 +1,3 @@
1
1
  module PumaCloudwatch
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma-cloudwatch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-11 00:00:00.000000000 Z
11
+ date: 2024-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-cloudwatch
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  requirements: []
117
- rubygems_version: 3.4.10
117
+ rubygems_version: 3.5.10
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Puma plugin sends puma stats to CloudWatch