sidekiq-cloudwatchmetrics 2.0.0 → 2.3.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: c546a1ec9301787c3ea92c0d9d36cd9ac3076642e7d2b5493813e1705f2068e7
4
- data.tar.gz: 46ac0dc38fb88bc38788f33b5589e9bc5481eb4e1398bc680868d26159ee0f91
3
+ metadata.gz: dcda0d610239286e3289711209bcd52f55a9ab00f9e37d8d768531ec125e24aa
4
+ data.tar.gz: 3214895b04fdff713a7ed11c110b7c895e91307594f6ad73c80064a390a89323
5
5
  SHA512:
6
- metadata.gz: 58b79e36af043d0342dfa1b29e9de3c024ca861dd4eab597442ade986dbcb3b4337badff8a321e2a63937c80fe89c8cf19f528a624942c43a788d261170e8d41
7
- data.tar.gz: 2c308a7266415a8c11dd6425169ecea8b27644e589a9923f231f6cfff11830aa827c8ba24af45e011227c84c1adcfb133c5316ac61b1a1e850f46a8911f465b6
6
+ metadata.gz: 96944fbb1a4b5669280e6146533d5f9d19ed9e67fec5feff31d1cdcb79c545bd0fb7529701bb72fdf72cef2fadc7e6a728c53d5d81726760a7dc4bf781f26d82
7
+ data.tar.gz: 12fdaf02f031a14937ca4dfc03ab47e96f2e77f43b2b6b635784367326fcf2a94a0c6fbe284981dab7f1fd06cc4876ce8b197bcdd9cca3660c4dbcdb1caa50e5
checksums.yaml.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -35,11 +35,18 @@ through environment variables that aws-sdk expects. You can also explicitly
35
35
  supply an [aws-sdk CloudWatch Client instance][cwclient]:
36
36
 
37
37
  ```ruby
38
- Sidekiq::CloudWatchMetrics.enable!(client: AWS::CloudWatch::Client.new)
38
+ Sidekiq::CloudWatchMetrics.enable!(client: Aws::CloudWatch::Client.new)
39
39
  ```
40
40
 
41
41
  [cwclient]: https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/CloudWatch/Client.html
42
42
 
43
+ The default namespace for metrics is "Sidekiq". You can configure this with the `namespace` option:
44
+
45
+ ```ruby
46
+ Sidekiq::CloudWatchMetrics.enable!(client: Aws::CloudWatch::Client.new, namespace: "Sidekiq-Staging")
47
+ ```
48
+
49
+
43
50
  ## Development
44
51
 
45
52
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "sidekiq"
4
4
  require "sidekiq/api"
5
- require "sidekiq/util"
6
5
 
7
6
  require "aws-sdk-cloudwatch"
8
7
 
@@ -11,8 +10,9 @@ module Sidekiq::CloudWatchMetrics
11
10
  Sidekiq.configure_server do |config|
12
11
  publisher = Publisher.new(**kwargs)
13
12
 
14
- if Sidekiq.options[:lifecycle_events].has_key?(:leader)
15
- # Only publish metrics on the leader if we have a leader (sidekiq-ent)
13
+ # Sidekiq enterprise has a globally unique leader thread, making it
14
+ # easier to publish the cluster-wide metrics from one place.
15
+ if defined?(Sidekiq::Enterprise)
16
16
  config.on(:leader) do
17
17
  publisher.start
18
18
  end
@@ -34,12 +34,24 @@ module Sidekiq::CloudWatchMetrics
34
34
  end
35
35
 
36
36
  class Publisher
37
- include Sidekiq::Util
37
+ begin
38
+ require "sidekiq/util"
39
+ include Sidekiq::Util
40
+ rescue LoadError
41
+ # Sidekiq 6.5 refactored to use Sidekiq::Component
42
+ require "sidekiq/component"
43
+ include Sidekiq::Component
44
+ end
38
45
 
39
46
  INTERVAL = 60 # seconds
40
47
 
41
- def initialize(client: Aws::CloudWatch::Client.new)
48
+ def initialize(config: Sidekiq, client: Aws::CloudWatch::Client.new, namespace: "Sidekiq", additional_dimensions: {})
49
+ # Sidekiq 6.5+ requires @config, which defaults to the top-level
50
+ # `Sidekiq` module, but can be overridden when running multiple Sidekiqs.
51
+ @config = config
42
52
  @client = client
53
+ @namespace = namespace
54
+ @additional_dimensions = additional_dimensions.map { |k, v| {name: k.to_s, value: v.to_s} }
43
55
  end
44
56
 
45
57
  def start
@@ -154,6 +166,14 @@ module Sidekiq::CloudWatchMetrics
154
166
  value: process["busy"] / process["concurrency"].to_f * 100.0,
155
167
  unit: "Percent",
156
168
  }
169
+
170
+ metrics << {
171
+ metric_name: "Utilization",
172
+ dimensions: [{name: "Tag", value: process["tag"]}],
173
+ timestamp: now,
174
+ value: process["busy"] / process["concurrency"].to_f * 100.0,
175
+ unit: "Percent",
176
+ }
157
177
  end
158
178
 
159
179
  queues.each do |(queue_name, queue_size)|
@@ -176,10 +196,15 @@ module Sidekiq::CloudWatchMetrics
176
196
  }
177
197
  end
178
198
 
199
+ unless @additional_dimensions.empty?
200
+ metrics = metrics.each do |metric|
201
+ metric[:dimensions] = (metric[:dimensions] || []) + @additional_dimensions
202
+ end
203
+ end
179
204
  # We can only put 20 metrics at a time
180
205
  metrics.each_slice(20) do |some_metrics|
181
206
  @client.put_metric_data(
182
- namespace: "Sidekiq",
207
+ namespace: @namespace,
183
208
  metric_data: some_metrics,
184
209
  )
185
210
  end
@@ -209,6 +234,9 @@ module Sidekiq::CloudWatchMetrics
209
234
  @stop = true
210
235
  @thread.wakeup
211
236
  @thread.join
237
+ rescue ThreadError
238
+ # Don't raise if thread is already dead.
239
+ nil
212
240
  end
213
241
  end
214
242
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-cloudwatchmetrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Cochran
@@ -10,40 +10,47 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDKDCCAhCgAwIBAgIBBzANBgkqhkiG9w0BAQsFADA6MQ0wCwYDVQQDDARzajI2
14
- MRQwEgYKCZImiZPyLGQBGRYEc2oyNjETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0x
15
- OTEwMjQwNjM0MjJaFw0yMDEwMjMwNjM0MjJaMDoxDTALBgNVBAMMBHNqMjYxFDAS
13
+ MIIDXDCCAkSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA6MQ0wCwYDVQQDDARzajI2
14
+ MRQwEgYKCZImiZPyLGQBGRYEc2oyNjETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0y
15
+ MjA3MDQwMDQwNDZaFw0yMzA3MDQwMDQwNDZaMDoxDTALBgNVBAMMBHNqMjYxFDAS
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/OQQIDAQABozkw
23
- NzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU99dfRjEKFyczTeIz
24
- m3ZsDWrNC80wDQYJKoZIhvcNAQELBQADggEBAI06Bv7coqIflKtxRIwIJABl3hRR
25
- fZ2U0C1T16VXGwGdxRyDJHYt/2aMDfS/bpDzqR0ela2dwTh/29/oZQeAtzbQq6dE
26
- 7Pax2oYi+dahcreJFndcA6P/dl03XLNVIFVDtfEHvcUjtKKWQALAWirmW7KGAW1R
27
- Xn1uy1RJ0TzazCY059p0UQwLU1KXz/5NnTrGka/GvKjLTjk67T6Y05lmr7TxMY2w
28
- cTRkS42ilkarelc4DnSSO5jw7qFq7Cmf6F9hMx3xdoSWpLf+FvXJRbYrqwZIsmME
29
- V8zEtJFhdNOFOdtcTE67qh/aYQe2y/LDnG9ywXHWdSeF4UUjg1WRt8s3OP8=
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
30
31
  -----END CERTIFICATE-----
31
- date: 2019-10-24 00:00:00.000000000 Z
32
+ date: 2022-08-15 00:00:00.000000000 Z
32
33
  dependencies:
33
34
  - !ruby/object:Gem::Dependency
34
35
  name: sidekiq
35
36
  requirement: !ruby/object:Gem::Requirement
36
37
  requirements:
37
- - - "~>"
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - - "<"
38
42
  - !ruby/object:Gem::Version
39
- version: '6.0'
43
+ version: '7.0'
40
44
  type: :runtime
41
45
  prerelease: false
42
46
  version_requirements: !ruby/object:Gem::Requirement
43
47
  requirements:
44
- - - "~>"
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '5.0'
51
+ - - "<"
45
52
  - !ruby/object:Gem::Version
46
- version: '6.0'
53
+ version: '7.0'
47
54
  - !ruby/object:Gem::Dependency
48
55
  name: aws-sdk-cloudwatch
49
56
  requirement: !ruby/object:Gem::Requirement
@@ -64,28 +71,28 @@ dependencies:
64
71
  requirements:
65
72
  - - "~>"
66
73
  - !ruby/object:Gem::Version
67
- version: '1.16'
74
+ version: '2.2'
68
75
  type: :development
69
76
  prerelease: false
70
77
  version_requirements: !ruby/object:Gem::Requirement
71
78
  requirements:
72
79
  - - "~>"
73
80
  - !ruby/object:Gem::Version
74
- version: '1.16'
81
+ version: '2.2'
75
82
  - !ruby/object:Gem::Dependency
76
83
  name: rake
77
84
  requirement: !ruby/object:Gem::Requirement
78
85
  requirements:
79
86
  - - "~>"
80
87
  - !ruby/object:Gem::Version
81
- version: '10.0'
88
+ version: '12.3'
82
89
  type: :development
83
90
  prerelease: false
84
91
  version_requirements: !ruby/object:Gem::Requirement
85
92
  requirements:
86
93
  - - "~>"
87
94
  - !ruby/object:Gem::Version
88
- version: '10.0'
95
+ version: '12.3'
89
96
  - !ruby/object:Gem::Dependency
90
97
  name: rspec
91
98
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +121,20 @@ dependencies:
114
121
  - - "~>"
115
122
  - !ruby/object:Gem::Version
116
123
  version: '0.9'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rexml
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.2'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.2'
117
138
  description: |
118
139
  Runs a thread inside your Sidekiq processes to report metrics to CloudWatch
119
140
  useful for autoscaling and keeping an eye on your queues.
@@ -137,7 +158,7 @@ require_paths:
137
158
  - lib
138
159
  required_ruby_version: !ruby/object:Gem::Requirement
139
160
  requirements:
140
- - - "~>"
161
+ - - ">="
141
162
  - !ruby/object:Gem::Version
142
163
  version: '2.4'
143
164
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -146,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
167
  - !ruby/object:Gem::Version
147
168
  version: '0'
148
169
  requirements: []
149
- rubygems_version: 3.0.4
170
+ rubygems_version: 3.1.6
150
171
  signing_key:
151
172
  specification_version: 4
152
173
  summary: Publish Sidekiq metrics to AWS CloudWatch
metadata.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- �k���n�s��1�Z�֐B~W|��޻�#k���nZ2\0��岌U�k(R��
2
- Q(�����qA������$uLI���AX��x3���P��h Q] ��SZDhOs��s���c��u������7��M{`�Կ���"`OI���p3��m8V�[r ’�&���Ȣ&�%�J�7A���Unϑ��hm ���RVtC<j2���D!��)��Z}H����e�ӃR�Pɨ7Pڀ��^�IRP����
1
+ �����舤-�pq*
2
+ D����J�����@}��%��b`OTpg"���v�W�h�m�g�X���3�6VεH�%��As�"���}�|kؐ˦�>����1����x��+��JL�:���J���6��/��R�<⩋No�V.�OF2u�!�쥅}/e)��1���7�� t�����U;�-8uti����@�劋nY��/����\��.W`om���1`or�� ���qG,T�ŋ