sidekiq-prometheus-exporter 0.1.9 → 0.1.14

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.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +12 -0
  3. data/.gitignore +3 -1
  4. data/.rubocop.yml +28 -28
  5. data/.travis.yml +76 -14
  6. data/Appraisals +17 -4
  7. data/README.md +121 -28
  8. data/Rakefile +73 -0
  9. data/docker/Dockerfile +24 -0
  10. data/docker/README.md +55 -0
  11. data/docker/config.ru +38 -0
  12. data/examples/docker-compose.yml +2 -2
  13. data/examples/screenshot.png +0 -0
  14. data/examples/{sidekiq.json → sidekiq-dashboard.grafana-6.json} +10 -52
  15. data/examples/sidekiq-dashboard.grafana-7.json +845 -0
  16. data/gemfiles/sidekiq_3.3.1.gemfile +2 -1
  17. data/gemfiles/sidekiq_3.3.1.gemfile.lock +49 -48
  18. data/gemfiles/sidekiq_3.x.gemfile +2 -1
  19. data/gemfiles/sidekiq_3.x.gemfile.lock +47 -46
  20. data/gemfiles/sidekiq_4.x.gemfile +1 -1
  21. data/gemfiles/sidekiq_4.x.gemfile.lock +38 -38
  22. data/gemfiles/sidekiq_5.x.gemfile +1 -1
  23. data/gemfiles/sidekiq_5.x.gemfile.lock +40 -39
  24. data/gemfiles/sidekiq_6.x.gemfile +8 -0
  25. data/gemfiles/sidekiq_6.x.gemfile.lock +100 -0
  26. data/gemfiles/sidekiq_head.gemfile +9 -0
  27. data/gemfiles/sidekiq_head.gemfile.lock +116 -0
  28. data/helm/sidekiq-prometheus-exporter/.helmignore +22 -0
  29. data/helm/sidekiq-prometheus-exporter/Chart.yaml +6 -0
  30. data/helm/sidekiq-prometheus-exporter/README.md +87 -0
  31. data/helm/sidekiq-prometheus-exporter/templates/NOTES.txt +15 -0
  32. data/helm/sidekiq-prometheus-exporter/templates/_helpers.tpl +109 -0
  33. data/helm/sidekiq-prometheus-exporter/templates/clusterrole.yaml +20 -0
  34. data/helm/sidekiq-prometheus-exporter/templates/clusterrolebinding.yaml +17 -0
  35. data/helm/sidekiq-prometheus-exporter/templates/deployment.yaml +62 -0
  36. data/helm/sidekiq-prometheus-exporter/templates/service.yaml +17 -0
  37. data/helm/sidekiq-prometheus-exporter/templates/serviceaccount.yaml +9 -0
  38. data/helm/sidekiq-prometheus-exporter/templates/servicemonitor.yaml +26 -0
  39. data/helm/sidekiq-prometheus-exporter/values.yaml +133 -0
  40. data/lib/sidekiq/prometheus/exporter.rb +12 -1
  41. data/lib/sidekiq/prometheus/exporter/exporters.rb +5 -1
  42. data/lib/sidekiq/prometheus/exporter/scheduler.rb +48 -0
  43. data/lib/sidekiq/prometheus/exporter/standard.rb +1 -1
  44. data/lib/sidekiq/prometheus/exporter/templates/scheduler.erb +12 -0
  45. data/lib/sidekiq/prometheus/exporter/templates/standard.erb +5 -5
  46. data/lib/sidekiq/prometheus/exporter/version.rb +1 -1
  47. data/sidekiq-prometheus-exporter.gemspec +4 -4
  48. metadata +38 -16
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'sidekiq/prometheus/exporter/standard'
4
4
  require 'sidekiq/prometheus/exporter/cron'
5
+ require 'sidekiq/prometheus/exporter/scheduler'
5
6
 
6
7
  module Sidekiq
7
8
  module Prometheus
@@ -9,9 +10,12 @@ module Sidekiq
9
10
  class Exporters
10
11
  AVAILABLE_EXPORTERS = {
11
12
  standard: Sidekiq::Prometheus::Exporter::Standard,
12
- cron: Sidekiq::Prometheus::Exporter::Cron
13
+ cron: Sidekiq::Prometheus::Exporter::Cron,
14
+ scheduler: Sidekiq::Prometheus::Exporter::Scheduler
13
15
  }.freeze
14
16
 
17
+ attr_reader :enabled
18
+
15
19
  def initialize
16
20
  @enabled = AVAILABLE_EXPORTERS.values.select(&:available?)
17
21
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+ require 'time'
5
+
6
+ # Exporter for the https://github.com/moove-it/sidekiq-scheduler
7
+ module Sidekiq
8
+ module Prometheus
9
+ module Exporter
10
+ class Scheduler
11
+ TEMPLATE = ERB.new(File.read(File.expand_path('templates/scheduler.erb', __dir__)))
12
+ SECONDS_IN_MINUTE = 60
13
+ Stats = Struct.new(:jobs_count, :enabled_jobs_count, :last_runs)
14
+
15
+ def self.available?
16
+ defined?(Sidekiq::Scheduler)
17
+ end
18
+
19
+ def initialize
20
+ @stats = Stats.new(recurring_jobs.count, enabled_recurring_jobs.count, last_runs)
21
+ end
22
+
23
+ def to_s
24
+ TEMPLATE.result(binding).chomp!
25
+ end
26
+
27
+ private
28
+
29
+ def last_runs
30
+ enabled_recurring_jobs.each_with_object({}) do |name, memo|
31
+ execution_time = SidekiqScheduler::RedisManager.get_job_last_time(name)
32
+ next unless execution_time
33
+
34
+ memo[name] = (Time.now.to_i - Time.parse(execution_time).to_i) / SECONDS_IN_MINUTE
35
+ end
36
+ end
37
+
38
+ def enabled_recurring_jobs
39
+ recurring_jobs.select { |name| Sidekiq::Scheduler.job_enabled?(name) }
40
+ end
41
+
42
+ def recurring_jobs
43
+ @recurring_jobs ||= (Sidekiq.schedule! || {}).keys.sort
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -46,7 +46,7 @@ module Sidekiq
46
46
  end
47
47
 
48
48
  def total_workers
49
- Sidekiq::ProcessSet.new.map { |process| process['concurrency'] }.reduce(:+)
49
+ Sidekiq::ProcessSet.new.map { |process| process['concurrency'].to_i }.reduce(0, :+)
50
50
  end
51
51
  end
52
52
  end
@@ -0,0 +1,12 @@
1
+ # HELP sidekiq_scheduler_jobs The number of recurring jobs.
2
+ # TYPE sidekiq_scheduler_jobs gauge
3
+ sidekiq_scheduler_jobs <%= format('%d', @stats.jobs_count) %>
4
+
5
+ # HELP sidekiq_scheduler_enabled_jobs The number of enabled recurring jobs.
6
+ # TYPE sidekiq_scheduler_enabled_jobs gauge
7
+ sidekiq_scheduler_enabled_jobs <%= format('%d', @stats.enabled_jobs_count) %>
8
+
9
+ # HELP sidekiq_scheduler_time_since_last_run_minutes The number of minutes since the last recurring job was executed and current time.
10
+ # TYPE sidekiq_scheduler_time_since_last_run_minutes gauge
11
+ <% @stats.last_runs.each do |job, last_run_minutes| %>sidekiq_scheduler_time_since_last_run_minutes{name="<%= job %>"} <%= format('%i', last_run_minutes) %>
12
+ <% end %>
@@ -6,11 +6,11 @@ sidekiq_processed_jobs_total <%= format('%d', @overview_stats.processed) %>
6
6
  # TYPE sidekiq_failed_jobs_total counter
7
7
  sidekiq_failed_jobs_total <%= format('%d', @overview_stats.failed) %>
8
8
 
9
- # HELP sidekiq_workers The total number of workers across all the processes.
9
+ # HELP sidekiq_workers The number of workers across all the processes.
10
10
  # TYPE sidekiq_workers gauge
11
11
  sidekiq_workers <%= format('%d', @total_workers) %>
12
12
 
13
- # HELP sidekiq_processes The total number of processes.
13
+ # HELP sidekiq_processes The number of processes.
14
14
  # TYPE sidekiq_processes gauge
15
15
  sidekiq_processes <%= format('%d', @overview_stats.processes_size) %>
16
16
 
@@ -18,7 +18,7 @@ sidekiq_processes <%= format('%d', @overview_stats.processes_size) %>
18
18
  # TYPE sidekiq_busy_workers gauge
19
19
  sidekiq_busy_workers <%= format('%d', @overview_stats.workers_size) %>
20
20
 
21
- # HELP sidekiq_enqueued_jobs The total number of enqueued jobs.
21
+ # HELP sidekiq_enqueued_jobs The number of enqueued jobs.
22
22
  # TYPE sidekiq_enqueued_jobs gauge
23
23
  sidekiq_enqueued_jobs <%= format('%d', @overview_stats.enqueued) %>
24
24
 
@@ -34,7 +34,7 @@ sidekiq_retry_jobs <%= format('%d', @overview_stats.retry_size) %>
34
34
  # TYPE sidekiq_dead_jobs gauge
35
35
  sidekiq_dead_jobs <%= format('%d', @overview_stats.dead_size) %>
36
36
 
37
- # HELP sidekiq_queue_latency_seconds The amount of seconds between oldest job being pushed to the queue and current time.
37
+ # HELP sidekiq_queue_latency_seconds The number of seconds between oldest job being pushed to the queue and current time.
38
38
  # TYPE sidekiq_queue_latency_seconds gauge
39
39
  <% @queues_stats.each do |queue| %>sidekiq_queue_latency_seconds{name="<%= queue.name %>"} <%= format('%.3f', queue.latency) %>
40
40
  <% end %>
@@ -42,7 +42,7 @@ sidekiq_dead_jobs <%= format('%d', @overview_stats.dead_size) %>
42
42
  # TYPE sidekiq_queue_enqueued_jobs gauge
43
43
  <% @queues_stats.each do |queue| %>sidekiq_queue_enqueued_jobs{name="<%= queue.name %>"} <%= format('%d', queue.size) %>
44
44
  <% end %>
45
- # HELP sidekiq_queue_max_processing_time_seconds The amount of seconds between oldest job of the queue being executed and current time.
45
+ # HELP sidekiq_queue_max_processing_time_seconds The number of seconds between oldest job of the queue being executed and current time.
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 %>
@@ -3,7 +3,7 @@
3
3
  module Sidekiq
4
4
  module Prometheus
5
5
  module Exporter
6
- VERSION = '0.1.9'.freeze
6
+ VERSION = '0.1.14'.freeze
7
7
  end
8
8
  end
9
9
  end
@@ -31,11 +31,11 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency 'sidekiq', '>= 3.3.1'
32
32
 
33
33
  spec.add_development_dependency 'appraisal', '~> 2.2'
34
- spec.add_development_dependency 'bundler', '~> 1.16'
34
+ spec.add_development_dependency 'bundler', '~> 2.1'
35
35
  spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
36
- spec.add_development_dependency 'pry-byebug', '~> 3.6'
37
- spec.add_development_dependency 'rack-test', '~> 0.8'
38
- spec.add_development_dependency 'rake', '~> 10.0'
36
+ spec.add_development_dependency 'pry-byebug', '~> 3.6.0'
37
+ spec.add_development_dependency 'rack-test', '~> 1.1'
38
+ spec.add_development_dependency 'rake', '~> 13.0'
39
39
  spec.add_development_dependency 'rspec', '~> 3.0'
40
40
  spec.add_development_dependency 'rubocop', '~> 0.58'
41
41
  spec.add_development_dependency 'rubocop-rspec', '~> 1.28.0'
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.9
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Fedorov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-27 00:00:00.000000000 Z
11
+ date: 2021-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
47
+ version: '2.1'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.16'
54
+ version: '2.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: codeclimate-test-reporter
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,42 +72,42 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.6'
75
+ version: 3.6.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.6'
82
+ version: 3.6.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rack-test
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.8'
89
+ version: '1.1'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.8'
96
+ version: '1.1'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '13.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '13.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -172,6 +172,7 @@ extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
174
  - ".codeclimate.yml"
175
+ - ".github/FUNDING.yml"
175
176
  - ".gitignore"
176
177
  - ".rspec"
177
178
  - ".rubocop.yml"
@@ -183,12 +184,16 @@ files:
183
184
  - Rakefile
184
185
  - bin/console
185
186
  - bin/setup
187
+ - docker/Dockerfile
188
+ - docker/README.md
189
+ - docker/config.ru
186
190
  - examples/docker-compose.yml
187
191
  - examples/metrics/Dockerfile
188
192
  - examples/metrics/config.ru
189
193
  - examples/prometheus/prometheus.yml
190
194
  - examples/screenshot.png
191
- - examples/sidekiq.json
195
+ - examples/sidekiq-dashboard.grafana-6.json
196
+ - examples/sidekiq-dashboard.grafana-7.json
192
197
  - examples/sidekiq/Dockerfile
193
198
  - examples/sidekiq/sidekiq.rb
194
199
  - examples/sidekiq/sidekiq.yml
@@ -200,11 +205,29 @@ files:
200
205
  - gemfiles/sidekiq_4.x.gemfile.lock
201
206
  - gemfiles/sidekiq_5.x.gemfile
202
207
  - gemfiles/sidekiq_5.x.gemfile.lock
208
+ - gemfiles/sidekiq_6.x.gemfile
209
+ - gemfiles/sidekiq_6.x.gemfile.lock
210
+ - gemfiles/sidekiq_head.gemfile
211
+ - gemfiles/sidekiq_head.gemfile.lock
212
+ - helm/sidekiq-prometheus-exporter/.helmignore
213
+ - helm/sidekiq-prometheus-exporter/Chart.yaml
214
+ - helm/sidekiq-prometheus-exporter/README.md
215
+ - helm/sidekiq-prometheus-exporter/templates/NOTES.txt
216
+ - helm/sidekiq-prometheus-exporter/templates/_helpers.tpl
217
+ - helm/sidekiq-prometheus-exporter/templates/clusterrole.yaml
218
+ - helm/sidekiq-prometheus-exporter/templates/clusterrolebinding.yaml
219
+ - helm/sidekiq-prometheus-exporter/templates/deployment.yaml
220
+ - helm/sidekiq-prometheus-exporter/templates/service.yaml
221
+ - helm/sidekiq-prometheus-exporter/templates/serviceaccount.yaml
222
+ - helm/sidekiq-prometheus-exporter/templates/servicemonitor.yaml
223
+ - helm/sidekiq-prometheus-exporter/values.yaml
203
224
  - lib/sidekiq/prometheus/exporter.rb
204
225
  - lib/sidekiq/prometheus/exporter/cron.rb
205
226
  - lib/sidekiq/prometheus/exporter/exporters.rb
227
+ - lib/sidekiq/prometheus/exporter/scheduler.rb
206
228
  - lib/sidekiq/prometheus/exporter/standard.rb
207
229
  - lib/sidekiq/prometheus/exporter/templates/cron.erb
230
+ - lib/sidekiq/prometheus/exporter/templates/scheduler.erb
208
231
  - lib/sidekiq/prometheus/exporter/templates/standard.erb
209
232
  - lib/sidekiq/prometheus/exporter/version.rb
210
233
  - sidekiq-prometheus-exporter.gemspec
@@ -212,7 +235,7 @@ homepage: https://github.com/Strech/sidekiq-prometheus-exporter
212
235
  licenses: []
213
236
  metadata:
214
237
  allowed_push_host: https://rubygems.org
215
- post_install_message:
238
+ post_install_message:
216
239
  rdoc_options: []
217
240
  require_paths:
218
241
  - lib
@@ -227,9 +250,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
250
  - !ruby/object:Gem::Version
228
251
  version: '0'
229
252
  requirements: []
230
- rubyforge_project:
231
- rubygems_version: 2.5.2.2
232
- signing_key:
253
+ rubygems_version: 3.0.3
254
+ signing_key:
233
255
  specification_version: 4
234
256
  summary: Prometheus exporter for the Sidekiq
235
257
  test_files: []