sidekiq-prometheus-exporter 0.1.15 → 0.1.16
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
- data/.github/workflows/ci.yaml +26 -34
- data/.rubocop.yml +33 -286
- data/README.md +11 -9
- data/Rakefile +21 -14
- data/docker/Dockerfile +4 -4
- data/docker/README.md +1 -0
- data/docker/config.ru +2 -1
- data/examples/metrics/config.ru +2 -0
- data/examples/sidekiq/sidekiq.rb +2 -0
- data/gemfiles/sidekiq_3.3.1.Gemfile.lock +27 -26
- data/gemfiles/sidekiq_3.x.Gemfile.lock +27 -26
- data/gemfiles/sidekiq_4.x.Gemfile.lock +27 -27
- data/gemfiles/sidekiq_5.x.Gemfile.lock +27 -27
- data/gemfiles/sidekiq_6.x.Gemfile.lock +27 -27
- data/gemfiles/sidekiq_latest.Gemfile.lock +27 -27
- data/helm/sidekiq-prometheus-exporter/Chart.yaml +1 -1
- data/helm/sidekiq-prometheus-exporter/README.md +1 -1
- data/helm/sidekiq-prometheus-exporter/values.yaml +2 -1
- data/lib/sidekiq/prometheus/exporter/standard.rb +19 -5
- data/lib/sidekiq/prometheus/exporter/templates/standard.erb +13 -1
- data/lib/sidekiq/prometheus/exporter/version.rb +1 -1
- data/sidekiq-prometheus-exporter.gemspec +6 -4
- metadata +36 -23
- data/.codeclimate.yml +0 -16
@@ -51,7 +51,7 @@ $ helm install sidekiq-metrics strech/sidekiq-prometheus-exporter --set serviceA
|
|
51
51
|
| `fullnameOverride` | Override the full resource names | `nil` |
|
52
52
|
| `image.registry` | Image registry | `docker.io` |
|
53
53
|
| `image.repository` | Image repository | `strech/sidekiq-prometheus-exporter` |
|
54
|
-
| `image.tag` | Image tag | `0.1.15`
|
54
|
+
| `image.tag` | Image tag | `0.1.15-3` |
|
55
55
|
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
56
56
|
| `image.pullSecrets` | Image pull secrets | `nil` |
|
57
57
|
| `containerPort` | Port for the exporter to bind on | `9292` |
|
@@ -9,7 +9,7 @@
|
|
9
9
|
image:
|
10
10
|
registry: docker.io
|
11
11
|
repository: strech/sidekiq-prometheus-exporter
|
12
|
-
tag: 0.1.15
|
12
|
+
tag: 0.1.15-3
|
13
13
|
## Specify a imagePullPolicy
|
14
14
|
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
|
15
15
|
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
@@ -77,6 +77,7 @@ containerPort: 9292
|
|
77
77
|
## ref: https://github.com/Strech/sidekiq-prometheus-exporter/tree/master/docker#supported-envs
|
78
78
|
##
|
79
79
|
# env:
|
80
|
+
# REDIS_SSL: "false"
|
80
81
|
# REDIS_HOST: "localhost"
|
81
82
|
# REDIS_PORT: 6379
|
82
83
|
# REDIS_URL: "..."
|
@@ -10,6 +10,8 @@ module Sidekiq
|
|
10
10
|
TEMPLATE = ERB.new(File.read(File.expand_path('templates/standard.erb', __dir__)))
|
11
11
|
|
12
12
|
QueueStats = Struct.new(:name, :size, :latency)
|
13
|
+
QueueWorkersStats = Struct.new(:total_workers, :busy_workers, :processes)
|
14
|
+
WorkersStats = Struct.new(:total_workers, :by_queue)
|
13
15
|
|
14
16
|
def self.available?
|
15
17
|
true
|
@@ -18,8 +20,8 @@ module Sidekiq
|
|
18
20
|
def initialize
|
19
21
|
@overview_stats = Sidekiq::Stats.new
|
20
22
|
@queues_stats = queues_stats
|
23
|
+
@workers_stats = workers_stats
|
21
24
|
@max_processing_times = max_processing_times
|
22
|
-
@total_workers = total_workers
|
23
25
|
end
|
24
26
|
|
25
27
|
def to_s
|
@@ -34,8 +36,24 @@ module Sidekiq
|
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
39
|
+
def workers_stats
|
40
|
+
workers_stats = WorkersStats.new(0, {})
|
41
|
+
|
42
|
+
Sidekiq::ProcessSet.new.each_with_object(workers_stats) do |process, stats|
|
43
|
+
stats.total_workers += process['concurrency'].to_i
|
44
|
+
|
45
|
+
process['queues'].each do |queue|
|
46
|
+
stats.by_queue[queue] ||= QueueWorkersStats.new(0, 0, 0)
|
47
|
+
stats.by_queue[queue].processes += 1
|
48
|
+
stats.by_queue[queue].busy_workers += process['busy'].to_i
|
49
|
+
stats.by_queue[queue].total_workers += process['concurrency'].to_i
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
37
54
|
def max_processing_times
|
38
55
|
now = Time.now.to_i
|
56
|
+
|
39
57
|
Sidekiq::Workers.new
|
40
58
|
.map { |_, _, execution| execution }
|
41
59
|
.group_by { |execution| execution['queue'] }
|
@@ -44,10 +62,6 @@ module Sidekiq
|
|
44
62
|
memo[queue] = now - oldest_execution['run_at']
|
45
63
|
end
|
46
64
|
end
|
47
|
-
|
48
|
-
def total_workers
|
49
|
-
Sidekiq::ProcessSet.new.map { |process| process['concurrency'].to_i }.reduce(0, :+)
|
50
|
-
end
|
51
65
|
end
|
52
66
|
end
|
53
67
|
end
|
@@ -8,7 +8,7 @@ sidekiq_failed_jobs_total <%= format('%d', @overview_stats.failed) %>
|
|
8
8
|
|
9
9
|
# HELP sidekiq_workers The number of workers across all the processes.
|
10
10
|
# TYPE sidekiq_workers gauge
|
11
|
-
sidekiq_workers <%= format('%d', @total_workers) %>
|
11
|
+
sidekiq_workers <%= format('%d', @workers_stats.total_workers) %>
|
12
12
|
|
13
13
|
# HELP sidekiq_processes The number of processes.
|
14
14
|
# TYPE sidekiq_processes gauge
|
@@ -46,3 +46,15 @@ sidekiq_dead_jobs <%= format('%d', @overview_stats.dead_size) %>
|
|
46
46
|
# TYPE sidekiq_queue_max_processing_time_seconds gauge
|
47
47
|
<% @max_processing_times.each do |queue, max_processing_time| %>sidekiq_queue_max_processing_time_seconds{name="<%= queue %>"} <%= format('%i', max_processing_time) %>
|
48
48
|
<% end %>
|
49
|
+
# HELP sidekiq_queue_workers The number of workers serving the queue.
|
50
|
+
# TYPE sidekiq_queue_workers gauge
|
51
|
+
<% @workers_stats.by_queue.each do |queue, stats| %>sidekiq_queue_workers{name="<%= queue %>"} <%= format('%i', stats.total_workers) %>
|
52
|
+
<% end %>
|
53
|
+
# HELP sidekiq_queue_processes The number of processes serving the queue.
|
54
|
+
# TYPE sidekiq_queue_processes gauge
|
55
|
+
<% @workers_stats.by_queue.each do |queue, stats| %>sidekiq_queue_processes{name="<%= queue %>"} <%= format('%i', stats.processes) %>
|
56
|
+
<% end %>
|
57
|
+
# HELP sidekiq_queue_busy_workers The number of workers performing the job for the queue.
|
58
|
+
# TYPE sidekiq_queue_busy_workers gauge
|
59
|
+
<% @workers_stats.by_queue.each do |queue, stats| %>sidekiq_queue_busy_workers{name="<%= queue %>"} <%= format('%i', stats.busy_workers) %>
|
60
|
+
<% end %>
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
19
19
|
else
|
20
20
|
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
21
|
-
|
21
|
+
'public gem pushes.'
|
22
22
|
end
|
23
23
|
|
24
24
|
spec.files = `git ls-files -z`.split("\x0").reject do |file|
|
@@ -28,16 +28,18 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.executables = spec.files.grep(%r{^exe/}) { |file| File.basename(file) }
|
29
29
|
spec.require_paths = %w(lib)
|
30
30
|
|
31
|
+
spec.required_ruby_version = '>= 2.3'
|
31
32
|
spec.add_dependency 'sidekiq', '>= 3.3.1'
|
32
33
|
|
33
34
|
spec.add_development_dependency 'appraisal', '~> 2.2'
|
34
35
|
spec.add_development_dependency 'bundler', '~> 2.1'
|
35
|
-
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
|
36
36
|
spec.add_development_dependency 'pry-byebug', '~> 3.6'
|
37
37
|
spec.add_development_dependency 'rack-test', '~> 1.1'
|
38
38
|
spec.add_development_dependency 'rake', '~> 13.0'
|
39
39
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
40
|
-
spec.add_development_dependency 'rubocop', '~>
|
41
|
-
spec.add_development_dependency 'rubocop-
|
40
|
+
spec.add_development_dependency 'rubocop', '~> 1.22'
|
41
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.12'
|
42
|
+
spec.add_development_dependency 'rubocop-rake', '~> 0.6'
|
43
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.6'
|
42
44
|
spec.add_development_dependency 'timecop', '~> 0.9'
|
43
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-prometheus-exporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Fedorov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.1'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: codeclimate-test-reporter
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '1.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '1.0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: pry-byebug
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,28 +114,56 @@ dependencies:
|
|
128
114
|
requirements:
|
129
115
|
- - "~>"
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
117
|
+
version: '1.22'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.22'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop-performance
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.12'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '1.12'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop-rake
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.6'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.6'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rubocop-rspec
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
159
|
+
version: '2.6'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
166
|
+
version: '2.6'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: timecop
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,7 +185,6 @@ executables: []
|
|
171
185
|
extensions: []
|
172
186
|
extra_rdoc_files: []
|
173
187
|
files:
|
174
|
-
- ".codeclimate.yml"
|
175
188
|
- ".github/FUNDING.yml"
|
176
189
|
- ".github/workflows/ci.yaml"
|
177
190
|
- ".gitignore"
|
@@ -243,14 +256,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
256
|
requirements:
|
244
257
|
- - ">="
|
245
258
|
- !ruby/object:Gem::Version
|
246
|
-
version: '
|
259
|
+
version: '2.3'
|
247
260
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
261
|
requirements:
|
249
262
|
- - ">="
|
250
263
|
- !ruby/object:Gem::Version
|
251
264
|
version: '0'
|
252
265
|
requirements: []
|
253
|
-
rubygems_version: 3.
|
266
|
+
rubygems_version: 3.2.20
|
254
267
|
signing_key:
|
255
268
|
specification_version: 4
|
256
269
|
summary: Prometheus exporter for the Sidekiq
|
data/.codeclimate.yml
DELETED