sidekiq-cloudwatchmetrics 2.5.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 004deef714e38c04cb032d6b38391314e93549fe2cc6727b650b269cdd6f1413
4
- data.tar.gz: 22470a586aaf2444b9997fd1e56ce6ce9ed581389fdba76c012fddb7ebbf914c
3
+ metadata.gz: 894ace11258aeb70fd06f4201fb84f493406199eb4bce1c97cd0c2627e69c9fa
4
+ data.tar.gz: c88fde8c0c0564f6036c1bc0e08ea14b0b02a89fb20026adca88c400b3bc08a8
5
5
  SHA512:
6
- metadata.gz: 04bc3f32a5e25b0ee25ace2a349a85a4e9313ef1555bc14757b0f102f02e3819d9f46ed9aefc23e9c8662dbe901194e154bd6a4ed52e8765a86bed7cb2ed7821
7
- data.tar.gz: afe7fe3476aaa4fb8b431df1e05b357e46e437f775235a02ef0a31daf7d3c454e8fb4b63eff9f261a91b49c772212c4b8691822f92918b2543ac89d37e194c03
6
+ metadata.gz: d82aecd5e61a8bcae2ab4873d47e9a3377325a8862b16dccff194cd80927c480007a4d20b966dc3c9fa60bace2ffd4db63fb5451288c7047eac1b586e0c51a62
7
+ data.tar.gz: dff2fa7ae30e790c5a4174597a5999852d30a0ddccba8ca2360872ee9389e8c41d6cd44109a1b8f74b940ffe87253776e6a01981e367927a8f43a0b2e6396014
checksums.yaml.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # Sidekiq CloudWatch Metrics
2
2
 
3
- [![Build Status](https://travis-ci.org/sj26/sidekiq-cloudwatchmetrics.svg)](https://travis-ci.org/sj26/sidekiq-cloudwatchmetrics)
4
-
5
3
  Runs a thread inside your Sidekiq processes to report metrics to CloudWatch
6
4
  useful for autoscaling and keeping an eye on your queues.
7
5
 
@@ -43,9 +41,14 @@ Sidekiq::CloudWatchMetrics.enable!(client: Aws::CloudWatch::Client.new)
43
41
  The default namespace for metrics is "Sidekiq". You can configure this with the `namespace` option:
44
42
 
45
43
  ```ruby
46
- Sidekiq::CloudWatchMetrics.enable!(client: Aws::CloudWatch::Client.new, namespace: "Sidekiq-Staging")
44
+ Sidekiq::CloudWatchMetrics.enable!(namespace: "Sidekiq-Staging")
47
45
  ```
48
46
 
47
+ Metrics are published every 60 seconds by default. You can adjust this with the `interval` option:
48
+
49
+ ```ruby
50
+ Sidekiq::CloudWatchMetrics.enable!(interval: 30)
51
+ ```
49
52
 
50
53
  ## Development
51
54
 
@@ -43,20 +43,21 @@ module Sidekiq::CloudWatchMetrics
43
43
  include Sidekiq::Component
44
44
  end
45
45
 
46
- INTERVAL = 60 # seconds
46
+ DEFAULT_INTERVAL = 60 # seconds
47
47
 
48
- def initialize(config: Sidekiq, client: Aws::CloudWatch::Client.new, namespace: "Sidekiq", process_metrics: true, additional_dimensions: {})
48
+ def initialize(config: Sidekiq, client: Aws::CloudWatch::Client.new, namespace: "Sidekiq", process_metrics: true, additional_dimensions: {}, interval: DEFAULT_INTERVAL)
49
49
  # Sidekiq 6.5+ requires @config, which defaults to the top-level
50
50
  # `Sidekiq` module, but can be overridden when running multiple Sidekiqs.
51
51
  @config = config
52
52
  @client = client
53
+ @interval = interval
53
54
  @namespace = namespace
54
55
  @process_metrics = process_metrics
55
56
  @additional_dimensions = additional_dimensions.map { |k, v| {name: k.to_s, value: v.to_s} }
56
57
  end
57
58
 
58
59
  def start
59
- logger.info { "Starting Sidekiq CloudWatch Metrics Publisher" }
60
+ logger.debug { "Starting Sidekiq CloudWatch Metrics Publisher" }
60
61
 
61
62
  @done = false
62
63
  @thread = safe_thread("cloudwatch metrics publisher", &method(:run))
@@ -69,19 +70,24 @@ module Sidekiq::CloudWatchMetrics
69
70
  def run
70
71
  logger.info { "Started Sidekiq CloudWatch Metrics Publisher" }
71
72
 
72
- # Publish stats every INTERVAL seconds, sleeping as required between runs
73
+ # Publish stats every @interval seconds, sleeping as required between runs
73
74
  now = Time.now.to_f
74
75
  tick = now
75
76
  until @stop
76
- logger.info { "Publishing Sidekiq CloudWatch Metrics" }
77
- publish
77
+ logger.debug { "Publishing Sidekiq CloudWatch Metrics" }
78
+ begin
79
+ publish
80
+ rescue => e
81
+ logger.error("Error publishing Sidekiq CloudWatch Metrics: #{e}")
82
+ handle_exception(e)
83
+ end
78
84
 
79
85
  now = Time.now.to_f
80
- tick = [tick + INTERVAL, now].max
86
+ tick = [tick + @interval, now].max
81
87
  sleep(tick - now) if tick > now
82
88
  end
83
89
 
84
- logger.info { "Stopped Sidekiq CloudWatch Metrics Publisher" }
90
+ logger.debug { "Stopped Sidekiq CloudWatch Metrics Publisher" }
85
91
  end
86
92
 
87
93
  def publish
@@ -169,12 +175,22 @@ module Sidekiq::CloudWatchMetrics
169
175
  end.each do |(tag, tag_processes)|
170
176
  next if tag.nil?
171
177
 
178
+ tag_dimensions = [{name: "Tag", value: tag}]
179
+
180
+ metrics << {
181
+ metric_name: "Capacity",
182
+ dimensions: tag_dimensions,
183
+ timestamp: now,
184
+ value: calculate_capacity(tag_processes),
185
+ unit: "Count",
186
+ }
187
+
172
188
  tag_utilization = calculate_utilization(tag_processes) * 100.0
173
189
 
174
190
  unless tag_utilization.nan?
175
191
  metrics << {
176
192
  metric_name: "Utilization",
177
- dimensions: [{name: "Tag", value: tag}],
193
+ dimensions: tag_dimensions,
178
194
  timestamp: now,
179
195
  value: tag_utilization,
180
196
  unit: "Percent",
@@ -189,7 +205,7 @@ module Sidekiq::CloudWatchMetrics
189
205
  unless process_utilization.nan?
190
206
  process_dimensions = [{name: "Hostname", value: process["hostname"]}]
191
207
 
192
- if process["tag"]
208
+ if process["tag"] && !process["tag"].to_s.empty?
193
209
  process_dimensions << {name: "Tag", value: process["tag"]}
194
210
  end
195
211
 
@@ -257,15 +273,17 @@ module Sidekiq::CloudWatchMetrics
257
273
  end
258
274
 
259
275
  def quiet
260
- logger.info { "Quieting Sidekiq CloudWatch Metrics Publisher" }
276
+ logger.debug { "Quieting Sidekiq CloudWatch Metrics Publisher" }
261
277
  @stop = true
262
278
  end
263
279
 
264
280
  def stop
265
- logger.info { "Stopping Sidekiq CloudWatch Metrics Publisher" }
281
+ logger.debug { "Stopping Sidekiq CloudWatch Metrics Publisher" }
266
282
  @stop = true
267
- @thread.wakeup
268
- @thread.join
283
+ if @thread
284
+ @thread.wakeup
285
+ @thread.join
286
+ end
269
287
  rescue ThreadError
270
288
  # Don't raise if thread is already dead.
271
289
  nil
data.tar.gz.sig CHANGED
@@ -1 +1 @@
1
- P6������am;>A��j��:+U٤u{��J�������, o6��>���P4Ϣ�y��Rȧi��I� �%��f���&����������c��< "O�Ξ���+�q��A]�=��Q�PG�OW�πyU���-4B?�� YA'|~jĒet~�᏾�+�1;tV�}2DH�Q�u<�������ެ–������MOFE/~,�?��Y��&�3���3h0�=�C9i2!���cvw
1
+ E�\���Ϭ�û}6bib%�͑/w_,����|Kf�����\�r����7ϒ�0q�yj �h�(��?�*R�dU���\��ޣUNf��:�}h������u&�y"� {SK�$��݁aL���xS/��v�QxY��b֞� oʏ{�U}ݰ[���)�u�}% ������@�TJwV.��]�p�߿kh����R�[Oe���V���v@oJuv��{ ����v��.ZT"�8L�� 0��:o�
metadata CHANGED
@@ -1,35 +1,34 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-cloudwatchmetrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Cochran
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDXDCCAkSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA6MQ0wCwYDVQQDDARzajI2
13
+ MIIDKDCCAhCgAwIBAgIBAzANBgkqhkiG9w0BAQsFADA6MQ0wCwYDVQQDDARzajI2
14
14
  MRQwEgYKCZImiZPyLGQBGRYEc2oyNjETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0y
15
- MjA3MDQwMDQwNDZaFw0yMzA3MDQwMDQwNDZaMDoxDTALBgNVBAMMBHNqMjYxFDAS
15
+ NDA3MjIwNjA3MjdaFw0yNTA3MjIwNjA3MjdaMDoxDTALBgNVBAMMBHNqMjYxFDAS
16
16
  BgoJkiaJk/IsZAEZFgRzajI2MRMwEQYKCZImiZPyLGQBGRYDY29tMIIBIjANBgkq
17
17
  hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr60Eo/ttCk8GMTMFiPr3GoYMIMFvLak
18
18
  xSmTk9YGCB6UiEePB4THSSA5w6IPyeaCF/nWkDp3/BAam0eZMWG1IzYQB23TqIM0
19
19
  1xzcNRvFsn0aQoQ00k+sj+G83j3T5OOV5OZIlu8xAChMkQmiPd1NXc6uFv+Iacz7
20
20
  kj+CMsI9YUFdNoU09QY0b+u+Rb6wDYdpyvN60YC30h0h1MeYbvYZJx/iZK4XY5zu
21
21
  4O/FL2ChjL2CPCpLZW55ShYyrzphWJwLOJe+FJ/ZBl6YXwrzQM9HKnt4titSNvyU
22
- KzE3L63A3PZvExzLrN9u09kuWLLJfXB2sGOlw3n9t72rJiuBr3/OQQIDAQABo20w
23
- azAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU99dfRjEKFyczTeIz
24
- m3ZsDWrNC80wGAYDVR0RBBEwD4ENc2oyNkBzajI2LmNvbTAYBgNVHRIEETAPgQ1z
25
- ajI2QHNqMjYuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCsa7k3TABBcyXotr3yCq6f
26
- xsgbMG9FR71c4wRgVNQi9O3jN64fQBbxo//BQlHfPCjs1CeU4es9xdQFfhqXAPXG
27
- P7mK3+qd5jObjh6l3/rDKrTXNS+P+YO/1frlZ6xPjCA8XgGc4y0rhAjZnVBDV6t1
28
- kmdtEmue1s1OxaMakr78XRZDxEuAeLM5fg8MYnlOFygEcAH6lZkTjXavY7s9MXRB
29
- AAMioxgB6J5QhXQ42OSWIzwHZIbSv3DV9Lf5sde50HIW5f9u5jn29TUGDhSWYKkh
30
- LDvy9dfwMMOdIZi75Q8SBBib84AuwhMHIlUv9FcHhh3dXsDDYkrVrpUAwCsG6yCm
22
+ KzE3L63A3PZvExzLrN9u09kuWLLJfXB2sGOlw3n9t72rJiuBr3/OQQIDAQABozkw
23
+ NzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU99dfRjEKFyczTeIz
24
+ m3ZsDWrNC80wDQYJKoZIhvcNAQELBQADggEBAKcQ+MfpXXDmqboG36O8mXhJZJ8+
25
+ zlUqM1QnoEG8XpH/29py4GzSgs6Sb+v/Z1SEArRDq0r1bKZuWiWxqEDnmSE94+pe
26
+ A0Ct6Pv/paEhQCoPkGQNa74cH4tzkVHIA7WSwRL8wOz5vo++YBKH5H36nNqtLV7s
27
+ kNJYsbeOL/w2icQ4b0w4KYgcs4bd6yrYdgcgsRd2sCYb2XFHjczYqw4iEwuUenNM
28
+ G8WXc9zUMVewWkEjS9s++xFNb/7f4dFNXCoE3pgHjzctt7gYcJVacprsg925LYHO
29
+ WsbnbEow7BPlYOZm3rDIsEYpWqxN0lR8BakO2ToJ5RAHXahFu4K4eJtAsLk=
31
30
  -----END CERTIFICATE-----
32
- date: 2023-03-24 00:00:00.000000000 Z
31
+ date: 2025-02-24 00:00:00.000000000 Z
33
32
  dependencies:
34
33
  - !ruby/object:Gem::Dependency
35
34
  name: sidekiq
@@ -152,7 +151,7 @@ homepage: https://github.com/sj26/sidekiq-cloudwatchmetrics
152
151
  licenses:
153
152
  - MIT
154
153
  metadata: {}
155
- post_install_message:
154
+ post_install_message:
156
155
  rdoc_options: []
157
156
  require_paths:
158
157
  - lib
@@ -160,15 +159,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
159
  requirements:
161
160
  - - ">="
162
161
  - !ruby/object:Gem::Version
163
- version: '2.4'
162
+ version: '2.7'
164
163
  required_rubygems_version: !ruby/object:Gem::Requirement
165
164
  requirements:
166
165
  - - ">="
167
166
  - !ruby/object:Gem::Version
168
167
  version: '0'
169
168
  requirements: []
170
- rubygems_version: 3.1.6
171
- signing_key:
169
+ rubygems_version: 3.5.16
170
+ signing_key:
172
171
  specification_version: 4
173
172
  summary: Publish Sidekiq metrics to AWS CloudWatch
174
173
  test_files: []
metadata.gz.sig CHANGED
Binary file