sidekiq-prometheus-exporter 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 %>
@@ -3,7 +3,7 @@
3
3
  module Sidekiq
4
4
  module Prometheus
5
5
  module Exporter
6
- VERSION = '0.1.15'.freeze
6
+ VERSION = '0.1.16'.freeze
7
7
  end
8
8
  end
9
9
  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
- 'public gem pushes.'
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', '~> 0.58'
41
- spec.add_development_dependency 'rubocop-rspec', '~> 1.28.0'
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.15
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-02-12 00:00:00.000000000 Z
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: '0.58'
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: '0.58'
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: 1.28.0
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: 1.28.0
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: '0'
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.0.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
@@ -1,16 +0,0 @@
1
- version: "2"
2
- plugins:
3
- duplication:
4
- enabled: true
5
- config:
6
- languages:
7
- ruby:
8
- mass_threshold: 30
9
- exclude_paths:
10
- - spec/
11
- rubocop:
12
- enabled: true
13
- channel: rubocop-0-58
14
- exclude_paths:
15
- - tmp/
16
- - gemfiles/