sidekiq-cloudwatchmetrics 2.3.1 → 2.5.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/sidekiq/cloudwatchmetrics.rb +51 -19
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 004deef714e38c04cb032d6b38391314e93549fe2cc6727b650b269cdd6f1413
|
4
|
+
data.tar.gz: 22470a586aaf2444b9997fd1e56ce6ce9ed581389fdba76c012fddb7ebbf914c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04bc3f32a5e25b0ee25ace2a349a85a4e9313ef1555bc14757b0f102f02e3819d9f46ed9aefc23e9c8662dbe901194e154bd6a4ed52e8765a86bed7cb2ed7821
|
7
|
+
data.tar.gz: afe7fe3476aaa4fb8b431df1e05b357e46e437f775235a02ef0a31daf7d3c454e8fb4b63eff9f261a91b49c772212c4b8691822f92918b2543ac89d37e194c03
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -45,12 +45,13 @@ module Sidekiq::CloudWatchMetrics
|
|
45
45
|
|
46
46
|
INTERVAL = 60 # seconds
|
47
47
|
|
48
|
-
def initialize(config: Sidekiq, client: Aws::CloudWatch::Client.new, namespace: "Sidekiq", additional_dimensions: {})
|
48
|
+
def initialize(config: Sidekiq, client: Aws::CloudWatch::Client.new, namespace: "Sidekiq", process_metrics: true, additional_dimensions: {})
|
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
53
|
@namespace = namespace
|
54
|
+
@process_metrics = process_metrics
|
54
55
|
@additional_dimensions = additional_dimensions.map { |k, v| {name: k.to_s, value: v.to_s} }
|
55
56
|
end
|
56
57
|
|
@@ -150,32 +151,59 @@ module Sidekiq::CloudWatchMetrics
|
|
150
151
|
value: calculate_capacity(processes),
|
151
152
|
unit: "Count",
|
152
153
|
},
|
153
|
-
{
|
154
|
-
metric_name: "Utilization",
|
155
|
-
timestamp: now,
|
156
|
-
value: calculate_utilization(processes) * 100.0,
|
157
|
-
unit: "Percent",
|
158
|
-
},
|
159
154
|
]
|
160
155
|
|
161
|
-
processes
|
162
|
-
metrics << {
|
163
|
-
metric_name: "Utilization",
|
164
|
-
dimensions: [{name: "Hostname", value: process["hostname"]}],
|
165
|
-
timestamp: now,
|
166
|
-
value: process["busy"] / process["concurrency"].to_f * 100.0,
|
167
|
-
unit: "Percent",
|
168
|
-
}
|
156
|
+
utilization = calculate_utilization(processes) * 100.0
|
169
157
|
|
158
|
+
unless utilization.nan?
|
170
159
|
metrics << {
|
171
160
|
metric_name: "Utilization",
|
172
|
-
dimensions: [{name: "Tag", value: process["tag"]}],
|
173
161
|
timestamp: now,
|
174
|
-
value:
|
162
|
+
value: utilization,
|
175
163
|
unit: "Percent",
|
176
164
|
}
|
177
165
|
end
|
178
166
|
|
167
|
+
processes.group_by do |process|
|
168
|
+
process["tag"]
|
169
|
+
end.each do |(tag, tag_processes)|
|
170
|
+
next if tag.nil?
|
171
|
+
|
172
|
+
tag_utilization = calculate_utilization(tag_processes) * 100.0
|
173
|
+
|
174
|
+
unless tag_utilization.nan?
|
175
|
+
metrics << {
|
176
|
+
metric_name: "Utilization",
|
177
|
+
dimensions: [{name: "Tag", value: tag}],
|
178
|
+
timestamp: now,
|
179
|
+
value: tag_utilization,
|
180
|
+
unit: "Percent",
|
181
|
+
}
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
if @process_metrics
|
186
|
+
processes.each do |process|
|
187
|
+
process_utilization = process["busy"] / process["concurrency"].to_f * 100.0
|
188
|
+
|
189
|
+
unless process_utilization.nan?
|
190
|
+
process_dimensions = [{name: "Hostname", value: process["hostname"]}]
|
191
|
+
|
192
|
+
if process["tag"]
|
193
|
+
process_dimensions << {name: "Tag", value: process["tag"]}
|
194
|
+
end
|
195
|
+
|
196
|
+
metrics << {
|
197
|
+
metric_name: "Utilization",
|
198
|
+
dimensions: process_dimensions,
|
199
|
+
timestamp: now,
|
200
|
+
value: process_utilization,
|
201
|
+
unit: "Percent",
|
202
|
+
}
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
179
207
|
queues.each do |(queue_name, queue_size)|
|
180
208
|
metrics << {
|
181
209
|
metric_name: "QueueSize",
|
@@ -201,6 +229,7 @@ module Sidekiq::CloudWatchMetrics
|
|
201
229
|
metric[:dimensions] = (metric[:dimensions] || []) + @additional_dimensions
|
202
230
|
end
|
203
231
|
end
|
232
|
+
|
204
233
|
# We can only put 20 metrics at a time
|
205
234
|
metrics.each_slice(20) do |some_metrics|
|
206
235
|
@client.put_metric_data(
|
@@ -218,10 +247,13 @@ module Sidekiq::CloudWatchMetrics
|
|
218
247
|
end
|
219
248
|
|
220
249
|
# Returns busy / concurrency averaged across processes (for scaling)
|
250
|
+
# Avoid considering processes not yet running any threads
|
221
251
|
private def calculate_utilization(processes)
|
222
|
-
processes.map do |process|
|
252
|
+
process_utilizations = processes.map do |process|
|
223
253
|
process["busy"] / process["concurrency"].to_f
|
224
|
-
end.
|
254
|
+
end.reject(&:nan?)
|
255
|
+
|
256
|
+
process_utilizations.sum / process_utilizations.size.to_f
|
225
257
|
end
|
226
258
|
|
227
259
|
def quiet
|
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.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Cochran
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
AAMioxgB6J5QhXQ42OSWIzwHZIbSv3DV9Lf5sde50HIW5f9u5jn29TUGDhSWYKkh
|
30
30
|
LDvy9dfwMMOdIZi75Q8SBBib84AuwhMHIlUv9FcHhh3dXsDDYkrVrpUAwCsG6yCm
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2023-
|
32
|
+
date: 2023-03-24 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: sidekiq
|
metadata.gz.sig
CHANGED
Binary file
|