sidekiq-cloudwatchmetrics 2.0.0 → 2.3.0

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: 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�ŋ