sidekiq_prometheus 1.8.2 → 1.8.3
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/.travis.yml +1 -2
- data/CHANGELOG.md +12 -0
- data/Gemfile +1 -1
- data/Rakefile +4 -11
- data/lib/sidekiq_prometheus/job_metrics.rb +5 -5
- data/lib/sidekiq_prometheus/metrics.rb +104 -94
- data/lib/sidekiq_prometheus/periodic_metrics.rb +55 -23
- data/lib/sidekiq_prometheus/version.rb +1 -1
- data/lib/sidekiq_prometheus.rb +22 -23
- data/sidekiq_prometheus.gemspec +21 -21
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9a7474fb0e37d8c0aa3849bc4c5df6ff3b8a173a3545fcf5027dc29f8d1c4eb
|
4
|
+
data.tar.gz: 6cb664182b40af876f6e58c532c235d3169ca3cb154f9aa785faaec384c3e9db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 467ce07f7b4a5b79dcb16f61d8da97076c32ed5e5bb7b892d19a9a1d397214bb254188cacdb615fa3495d7485ddad38d38ea3e6078bae6ffaf4928a513a79deb
|
7
|
+
data.tar.gz: 3b47b8a80fa6569456b166374e9395db173c243e86fc63e36a25292f0d463c0a0501cd29374d51d490e5add972412b5901f77a077937436f5e1b7cfbb64a83b2
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
|
3
|
+
<a name="v1.8.2"></a>
|
4
|
+
## [v1.8.2](https://github.com/fastly/sidekiq-prometheus/compare/v1.8.1...v1.8.2) (2022-11-29)
|
5
|
+
|
6
|
+
## What's Changed
|
7
|
+
* Allow sidekiq-prometheus to work with prometheus-client version > 2 by @hieuk09 in https://github.com/fastly/sidekiq-prometheus/pull/29
|
8
|
+
* Fixes Newer Sidekiq-Enterprise versions that have a Senate.leader? issue with Sidekiq Prometheus 1.8.1 by @imightbeinatree in https://github.com/fastly/sidekiq-prometheus/pull/32
|
9
|
+
|
10
|
+
## New Contributors
|
11
|
+
* @hieuk09 made their first contribution in https://github.com/fastly/sidekiq-prometheus/pull/29
|
12
|
+
|
13
|
+
**Full Changelog**: https://github.com/fastly/sidekiq-prometheus/compare/v1.8.1...v1.8.2
|
14
|
+
|
3
15
|
<a name="v1.8.1"></a>
|
4
16
|
## [v1.8.1](https://github.com/fastly/sidekiq-prometheus/compare/v1.8.0...v1.8.1) (2022-10-18)
|
5
17
|
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,19 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rspec/core/rake_task"
|
5
|
+
require "standard/rake"
|
5
6
|
|
6
7
|
RSpec::Core::RakeTask.new(:spec)
|
7
8
|
|
8
|
-
begin
|
9
|
-
require 'rubocop/rake_task'
|
10
|
-
RuboCop::RakeTask.new(:rubocop) do |task|
|
11
|
-
task.options = ['-c.rubocop.yml']
|
12
|
-
end
|
13
|
-
rescue LoadError
|
14
|
-
end
|
15
|
-
|
16
9
|
task default: %w[
|
17
|
-
|
10
|
+
standard
|
18
11
|
spec
|
19
12
|
]
|
@@ -7,8 +7,8 @@ class SidekiqPrometheus::JobMetrics
|
|
7
7
|
# If we're using a wrapper class, like ActiveJob, use the "wrapped"
|
8
8
|
# attribute to expose the underlying thing.
|
9
9
|
labels = {
|
10
|
-
class: job[
|
11
|
-
queue: queue
|
10
|
+
class: job["wrapped"] || worker.class.to_s,
|
11
|
+
queue: queue
|
12
12
|
}
|
13
13
|
|
14
14
|
begin
|
@@ -29,11 +29,11 @@ class SidekiqPrometheus::JobMetrics
|
|
29
29
|
end
|
30
30
|
|
31
31
|
result
|
32
|
-
rescue
|
33
|
-
if e.class.to_s ==
|
32
|
+
rescue => e
|
33
|
+
if e.class.to_s == "Sidekiq::Limiter::OverLimit"
|
34
34
|
registry[:sidekiq_job_over_limit].increment(labels: labels)
|
35
35
|
else
|
36
|
-
err_label = {
|
36
|
+
err_label = {error_class: e.class.to_s}
|
37
37
|
registry[:sidekiq_job_failed].increment(labels: err_label.merge(labels))
|
38
38
|
end
|
39
39
|
|
@@ -3,106 +3,106 @@
|
|
3
3
|
module SidekiqPrometheus::Metrics
|
4
4
|
module_function
|
5
5
|
|
6
|
-
UNKNOWN =
|
6
|
+
UNKNOWN = "unknown"
|
7
7
|
|
8
8
|
VALID_TYPES = %i[counter gauge histogram summary].freeze
|
9
9
|
JOB_LABELS = %i[class queue].freeze
|
10
10
|
SIDEKIQ_GLOBAL_METRICS = [
|
11
|
-
{
|
12
|
-
|
13
|
-
|
14
|
-
{
|
15
|
-
|
16
|
-
|
17
|
-
{
|
18
|
-
|
19
|
-
|
20
|
-
{
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
{
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
{
|
29
|
-
|
30
|
-
|
31
|
-
{
|
32
|
-
|
33
|
-
|
34
|
-
{
|
35
|
-
|
36
|
-
|
37
|
-
{
|
38
|
-
|
39
|
-
|
40
|
-
{
|
41
|
-
|
42
|
-
|
43
|
-
{
|
44
|
-
|
45
|
-
|
46
|
-
{
|
47
|
-
|
48
|
-
|
49
|
-
{
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
{
|
54
|
-
|
55
|
-
|
56
|
-
|
11
|
+
{name: :sidekiq_workers_size,
|
12
|
+
type: :gauge,
|
13
|
+
docstring: "Total number of workers processing jobs"},
|
14
|
+
{name: :sidekiq_processes_size,
|
15
|
+
type: :gauge,
|
16
|
+
docstring: "Total number of running sidekiq processes"},
|
17
|
+
{name: :sidekiq_dead_size,
|
18
|
+
type: :gauge,
|
19
|
+
docstring: "Total Dead Size"},
|
20
|
+
{name: :sidekiq_enqueued,
|
21
|
+
type: :gauge,
|
22
|
+
docstring: "Total Size of all known queues",
|
23
|
+
labels: %i[queue]},
|
24
|
+
{name: :sidekiq_queue_latency,
|
25
|
+
type: :summary,
|
26
|
+
docstring: "Latency (in seconds) of all queues",
|
27
|
+
labels: %i[queue]},
|
28
|
+
{name: :sidekiq_failed,
|
29
|
+
type: :gauge,
|
30
|
+
docstring: "Number of job executions which raised an error"},
|
31
|
+
{name: :sidekiq_processed,
|
32
|
+
type: :gauge,
|
33
|
+
docstring: "Number of job executions completed (success or failure)"},
|
34
|
+
{name: :sidekiq_retry_size,
|
35
|
+
type: :gauge,
|
36
|
+
docstring: "Total Retries Size"},
|
37
|
+
{name: :sidekiq_scheduled_size,
|
38
|
+
type: :gauge,
|
39
|
+
docstring: "Total Scheduled Size"},
|
40
|
+
{name: :sidekiq_redis_connected_clients,
|
41
|
+
type: :gauge,
|
42
|
+
docstring: "Number of clients connected to Redis instance for Sidekiq"},
|
43
|
+
{name: :sidekiq_redis_used_memory,
|
44
|
+
type: :gauge,
|
45
|
+
docstring: "Used memory from Redis.info"},
|
46
|
+
{name: :sidekiq_redis_used_memory_peak,
|
47
|
+
type: :gauge,
|
48
|
+
docstring: "Used memory peak from Redis.info"},
|
49
|
+
{name: :sidekiq_redis_keys,
|
50
|
+
type: :gauge,
|
51
|
+
docstring: "Number of redis keys",
|
52
|
+
labels: %i[database]},
|
53
|
+
{name: :sidekiq_redis_expires,
|
54
|
+
type: :gauge,
|
55
|
+
docstring: "Number of redis keys with expiry set",
|
56
|
+
labels: %i[database]}
|
57
57
|
].freeze
|
58
58
|
SIDEKIQ_JOB_METRICS = [
|
59
|
-
{
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
{
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
{
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
{
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
{
|
76
|
-
|
77
|
-
|
78
|
-
|
59
|
+
{name: :sidekiq_job_count,
|
60
|
+
type: :counter,
|
61
|
+
docstring: "Count of Sidekiq jobs",
|
62
|
+
labels: JOB_LABELS},
|
63
|
+
{name: :sidekiq_job_duration,
|
64
|
+
type: :histogram,
|
65
|
+
docstring: "Sidekiq job processing duration",
|
66
|
+
labels: JOB_LABELS},
|
67
|
+
{name: :sidekiq_job_failed,
|
68
|
+
type: :counter,
|
69
|
+
docstring: "Count of failed Sidekiq jobs",
|
70
|
+
labels: JOB_LABELS + [:error_class]},
|
71
|
+
{name: :sidekiq_job_success,
|
72
|
+
type: :counter,
|
73
|
+
docstring: "Count of successful Sidekiq jobs",
|
74
|
+
labels: JOB_LABELS},
|
75
|
+
{name: :sidekiq_job_over_limit,
|
76
|
+
type: :counter,
|
77
|
+
docstring: "Count of over limit Sidekiq jobs",
|
78
|
+
labels: JOB_LABELS}
|
79
79
|
].freeze
|
80
80
|
SIDEKIQ_GC_METRIC = {
|
81
|
-
name:
|
82
|
-
type:
|
83
|
-
docstring:
|
84
|
-
buckets:
|
85
|
-
labels:
|
81
|
+
name: :sidekiq_job_allocated_objects,
|
82
|
+
type: :histogram,
|
83
|
+
docstring: "Count of ruby objects allocated by a Sidekiq job",
|
84
|
+
buckets: [10, 50, 100, 500, 1_000, 2_500, 5_000, 10_000, 50_000, 100_000, 500_000, 1_000_000, 5_000_000, 10_000_000, 25_000_000],
|
85
|
+
labels: JOB_LABELS
|
86
86
|
}.freeze
|
87
87
|
SIDEKIQ_WORKER_GC_METRICS = [
|
88
|
-
{
|
89
|
-
|
90
|
-
|
91
|
-
{
|
92
|
-
|
93
|
-
|
94
|
-
{
|
95
|
-
|
96
|
-
|
97
|
-
{
|
98
|
-
|
99
|
-
|
100
|
-
{
|
101
|
-
|
102
|
-
|
103
|
-
{
|
104
|
-
|
105
|
-
|
88
|
+
{name: :sidekiq_allocated_objects,
|
89
|
+
type: :counter,
|
90
|
+
docstring: "Count of ruby objects allocated by a Sidekiq worker"},
|
91
|
+
{name: :sidekiq_heap_free_slots,
|
92
|
+
type: :gauge,
|
93
|
+
docstring: "Sidekiq worker GC.stat[:heap_free_slots]"},
|
94
|
+
{name: :sidekiq_heap_live_slots,
|
95
|
+
type: :gauge,
|
96
|
+
docstring: "Sidekiq worker GC.stat[:heap_live_slots]"},
|
97
|
+
{name: :sidekiq_major_gc_count,
|
98
|
+
type: :counter,
|
99
|
+
docstring: "Sidekiq worker GC.stat[:major_gc_count]"},
|
100
|
+
{name: :sidekiq_minor_gc_count,
|
101
|
+
type: :counter,
|
102
|
+
docstring: "Sidekiq worker GC.stat[:minor_gc_count]"},
|
103
|
+
{name: :sidekiq_rss,
|
104
|
+
type: :gauge,
|
105
|
+
docstring: "Sidekiq process RSS"}
|
106
106
|
].freeze
|
107
107
|
|
108
108
|
def registry
|
@@ -131,6 +131,16 @@ module SidekiqPrometheus::Metrics
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
+
def unregister_sidekiq_global_metrics
|
135
|
+
unregister_metrics SIDEKIQ_GLOBAL_METRICS
|
136
|
+
end
|
137
|
+
|
138
|
+
def unregister_metrics(metrics)
|
139
|
+
metrics.each do |metric|
|
140
|
+
unregister(name: metric[:name])
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
134
144
|
##
|
135
145
|
# Fetch a metric from the registry
|
136
146
|
# @param name [Symbol] name of metric to fetch
|
@@ -139,7 +149,7 @@ module SidekiqPrometheus::Metrics
|
|
139
149
|
end
|
140
150
|
|
141
151
|
class << self
|
142
|
-
|
152
|
+
alias_method :get, :[]
|
143
153
|
end
|
144
154
|
|
145
155
|
##
|
@@ -160,9 +170,9 @@ module SidekiqPrometheus::Metrics
|
|
160
170
|
# Aggregate all labels
|
161
171
|
all_labels = labels | SidekiqPrometheus.custom_labels.fetch(name, []) | all_preset_labels.keys
|
162
172
|
|
163
|
-
options = {
|
164
|
-
|
165
|
-
|
173
|
+
options = {docstring: docstring,
|
174
|
+
labels: all_labels,
|
175
|
+
preset_labels: all_preset_labels}
|
166
176
|
|
167
177
|
options[:buckets] = buckets if buckets
|
168
178
|
|
@@ -11,7 +11,7 @@
|
|
11
11
|
# @see https://github.com/mperham/sidekiq/blob/main/lib/sidekiq/api.rb
|
12
12
|
|
13
13
|
begin
|
14
|
-
require
|
14
|
+
require "sidekiq/component"
|
15
15
|
rescue LoadError
|
16
16
|
end
|
17
17
|
|
@@ -21,6 +21,9 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
21
21
|
# @return [Boolean] When +true+ will stop the reporting loop.
|
22
22
|
attr_accessor :done
|
23
23
|
|
24
|
+
# @return [Boolean] Indicates if this instance is currently the leader.
|
25
|
+
attr_accessor :leader
|
26
|
+
|
24
27
|
# @return [Integer] Interval in seconds to record metrics. Default: [SidekiqPrometheus.periodic_reporting_interval]
|
25
28
|
attr_reader :interval
|
26
29
|
attr_reader :senate, :sidekiq_stats, :sidekiq_queue
|
@@ -28,7 +31,7 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
28
31
|
GLOBAL_STATS = %i[failed processed retry_size dead_size scheduled_size workers_size processes_size].freeze
|
29
32
|
GC_STATS = {
|
30
33
|
counters: %i[major_gc_count minor_gc_count total_allocated_objects],
|
31
|
-
gauges: %i[heap_live_slots heap_free_slots]
|
34
|
+
gauges: %i[heap_live_slots heap_free_slots]
|
32
35
|
}.freeze
|
33
36
|
REDIS_STATS = %w[connected_clients used_memory used_memory_peak].freeze
|
34
37
|
|
@@ -50,24 +53,25 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
50
53
|
@sidekiq_stats = sidekiq_stats
|
51
54
|
@sidekiq_queue = sidekiq_queue
|
52
55
|
@senate = if senate.nil?
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
56
|
+
if Object.const_defined?("Sidekiq::Senate")
|
57
|
+
if respond_to?(:leader?)
|
58
|
+
self
|
59
|
+
else
|
60
|
+
Sidekiq::Senate
|
61
|
+
end
|
62
|
+
else
|
63
|
+
Senate
|
64
|
+
end
|
65
|
+
else
|
66
|
+
senate
|
67
|
+
end
|
68
|
+
@leader = false
|
65
69
|
end
|
66
70
|
|
67
71
|
##
|
68
72
|
# Start the period mettric reporter
|
69
73
|
def start
|
70
|
-
Sidekiq.logger.info(
|
74
|
+
Sidekiq.logger.info("SidekiqPrometheus: Starting periodic metrics reporting")
|
71
75
|
@thread = Thread.new(&method(:run))
|
72
76
|
end
|
73
77
|
|
@@ -100,8 +104,8 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
100
104
|
end
|
101
105
|
|
102
106
|
sidekiq_queue.all.each do |queue|
|
103
|
-
SidekiqPrometheus[:sidekiq_enqueued]&.set(queue.size, labels: {
|
104
|
-
SidekiqPrometheus[:sidekiq_queue_latency]&.observe(queue.latency, labels: {
|
107
|
+
SidekiqPrometheus[:sidekiq_enqueued]&.set(queue.size, labels: {queue: queue.name})
|
108
|
+
SidekiqPrometheus[:sidekiq_queue_latency]&.observe(queue.latency, labels: {queue: queue.name})
|
105
109
|
end
|
106
110
|
end
|
107
111
|
|
@@ -122,7 +126,7 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
122
126
|
|
123
127
|
db_stats = redis_info.select { |k, _v| k.match(/^db/) }
|
124
128
|
db_stats.each do |db, stat|
|
125
|
-
label = {
|
129
|
+
label = {database: db}
|
126
130
|
values = stat.scan(/\d+/)
|
127
131
|
SidekiqPrometheus[:sidekiq_redis_keys]&.set(values[0].to_i, labels: label)
|
128
132
|
SidekiqPrometheus[:sidekiq_redis_expires]&.set(values[1].to_i, labels: label)
|
@@ -134,8 +138,16 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
134
138
|
# @see https://github.com/discourse/prometheus_exporter/blob/v0.3.3/lib/prometheus_exporter/instrumentation/process.rb#L39-L42
|
135
139
|
def rss
|
136
140
|
pid = Process.pid
|
137
|
-
@pagesize ||=
|
138
|
-
|
141
|
+
@pagesize ||= begin
|
142
|
+
`getconf PAGESIZE`.to_i
|
143
|
+
rescue
|
144
|
+
4096
|
145
|
+
end
|
146
|
+
begin
|
147
|
+
File.read("/proc/#{pid}/statm").split(" ")[1].to_i * @pagesize
|
148
|
+
rescue
|
149
|
+
0
|
150
|
+
end
|
139
151
|
end
|
140
152
|
|
141
153
|
##
|
@@ -144,10 +156,14 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
144
156
|
def run
|
145
157
|
until done
|
146
158
|
begin
|
147
|
-
|
148
|
-
|
159
|
+
if SidekiqPrometheus.global_metrics_enabled?
|
160
|
+
handle_leader_state(senate.leader?)
|
161
|
+
report_global_metrics if leader
|
162
|
+
report_redis_metrics if leader
|
163
|
+
end
|
164
|
+
|
149
165
|
report_gc_metrics if SidekiqPrometheus.gc_metrics_enabled?
|
150
|
-
rescue
|
166
|
+
rescue => e
|
151
167
|
Sidekiq.logger.error e
|
152
168
|
ensure
|
153
169
|
sleep interval
|
@@ -155,6 +171,22 @@ class SidekiqPrometheus::PeriodicMetrics
|
|
155
171
|
end
|
156
172
|
end
|
157
173
|
|
174
|
+
##
|
175
|
+
# If this instance was promoted to the leader set the local state and register the metrics.
|
176
|
+
def handle_leader_state(senate_leader)
|
177
|
+
return if senate_leader == leader
|
178
|
+
|
179
|
+
if senate_leader && !leader
|
180
|
+
# This instance is now the leader
|
181
|
+
self.leader = true
|
182
|
+
SidekiqPrometheus::Metrics.register_sidekiq_global_metrics
|
183
|
+
else
|
184
|
+
# we've been demoted!
|
185
|
+
SidekiqPrometheus::Metrics.unregister_sidekiq_global_metrics
|
186
|
+
self.leader = false
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
158
190
|
##
|
159
191
|
# Fake Senate class to guard against undefined constant errors.
|
160
192
|
# @private
|
data/lib/sidekiq_prometheus.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
3
|
+
require "benchmark"
|
4
|
+
require "rack"
|
5
|
+
require "prometheus/client"
|
6
|
+
require "prometheus/middleware/exporter"
|
7
|
+
require "sidekiq"
|
8
|
+
require "sidekiq/api"
|
9
|
+
require "webrick"
|
10
10
|
|
11
11
|
begin
|
12
|
-
require
|
12
|
+
require "sidekiq/ent"
|
13
13
|
rescue LoadError
|
14
14
|
end
|
15
15
|
|
@@ -77,7 +77,7 @@ module SidekiqPrometheus
|
|
77
77
|
self.global_metrics_enabled = true
|
78
78
|
self.periodic_reporting_interval = 30
|
79
79
|
self.metrics_server_enabled = true
|
80
|
-
self.metrics_host =
|
80
|
+
self.metrics_host = "localhost"
|
81
81
|
self.metrics_port = 9359
|
82
82
|
self.metrics_server_logger_enabled = true
|
83
83
|
self.custom_labels = {}
|
@@ -115,7 +115,7 @@ module SidekiqPrometheus
|
|
115
115
|
# Requires +Sidekiq::Enterprise+ as it uses the leader election functionality
|
116
116
|
# @return [Boolean] defaults to true if +Sidekiq::Enterprise+ is available
|
117
117
|
def global_metrics_enabled?
|
118
|
-
Object.const_defined?(
|
118
|
+
Object.const_defined?("Sidekiq::Enterprise") && global_metrics_enabled
|
119
119
|
end
|
120
120
|
|
121
121
|
##
|
@@ -149,8 +149,8 @@ module SidekiqPrometheus
|
|
149
149
|
end
|
150
150
|
|
151
151
|
class << self
|
152
|
-
|
153
|
-
|
152
|
+
alias_method :configure!, :configure
|
153
|
+
alias_method :get, :[]
|
154
154
|
end
|
155
155
|
|
156
156
|
##
|
@@ -166,7 +166,7 @@ module SidekiqPrometheus
|
|
166
166
|
def register_custom_metrics
|
167
167
|
return if custom_metrics.empty?
|
168
168
|
|
169
|
-
raise SidekiqPrometheus::Error,
|
169
|
+
raise SidekiqPrometheus::Error, "custom_metrics is not an array." unless custom_metrics.is_a?(Array)
|
170
170
|
|
171
171
|
SidekiqPrometheus::Metrics.register_metrics(custom_metrics)
|
172
172
|
end
|
@@ -178,7 +178,6 @@ module SidekiqPrometheus
|
|
178
178
|
SidekiqPrometheus::Metrics.register_sidekiq_job_metrics
|
179
179
|
SidekiqPrometheus::Metrics.register_sidekiq_gc_metric if gc_metrics_enabled?
|
180
180
|
SidekiqPrometheus::Metrics.register_sidekiq_worker_gc_metrics if gc_metrics_enabled? && periodic_metrics_enabled?
|
181
|
-
SidekiqPrometheus::Metrics.register_sidekiq_global_metrics if global_metrics_enabled? && periodic_metrics_enabled?
|
182
181
|
register_custom_metrics
|
183
182
|
|
184
183
|
sidekiq_setup
|
@@ -195,12 +194,12 @@ module SidekiqPrometheus
|
|
195
194
|
end
|
196
195
|
|
197
196
|
if periodic_metrics_enabled?
|
198
|
-
config.on(:startup)
|
197
|
+
config.on(:startup) { SidekiqPrometheus::PeriodicMetrics.reporter(config).start }
|
199
198
|
config.on(:shutdown) { SidekiqPrometheus::PeriodicMetrics.reporter(config).stop }
|
200
199
|
end
|
201
200
|
|
202
201
|
if metrics_server_enabled?
|
203
|
-
config.on(:startup)
|
202
|
+
config.on(:startup) { SidekiqPrometheus.metrics_server }
|
204
203
|
config.on(:shutdown) { SidekiqPrometheus.metrics_server.kill }
|
205
204
|
end
|
206
205
|
end
|
@@ -213,11 +212,11 @@ module SidekiqPrometheus
|
|
213
212
|
def metrics_server
|
214
213
|
opts = {
|
215
214
|
Port: SidekiqPrometheus.metrics_port,
|
216
|
-
Host: SidekiqPrometheus.metrics_host
|
215
|
+
Host: SidekiqPrometheus.metrics_host
|
217
216
|
}
|
218
217
|
|
219
218
|
unless metrics_server_logger_enabled?
|
220
|
-
opts[:Logger] = WEBrick::Log.new(
|
219
|
+
opts[:Logger] = WEBrick::Log.new("/dev/null")
|
221
220
|
opts[:AccessLog] = []
|
222
221
|
end
|
223
222
|
|
@@ -225,7 +224,7 @@ module SidekiqPrometheus
|
|
225
224
|
Rack::Handler::WEBrick.run(
|
226
225
|
Rack::Builder.new {
|
227
226
|
use Prometheus::Middleware::Exporter, registry: SidekiqPrometheus.registry
|
228
|
-
run ->(_) { [301, {
|
227
|
+
run ->(_) { [301, {"Location" => "/metrics"}, []] }
|
229
228
|
},
|
230
229
|
**opts
|
231
230
|
)
|
@@ -235,7 +234,7 @@ end
|
|
235
234
|
|
236
235
|
class SidekiqPrometheus::Error < StandardError; end
|
237
236
|
|
238
|
-
require
|
239
|
-
require
|
240
|
-
require
|
241
|
-
require
|
237
|
+
require "sidekiq_prometheus/job_metrics"
|
238
|
+
require "sidekiq_prometheus/metrics"
|
239
|
+
require "sidekiq_prometheus/periodic_metrics"
|
240
|
+
require "sidekiq_prometheus/version"
|
data/sidekiq_prometheus.gemspec
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require
|
5
|
+
require "sidekiq_prometheus/version"
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
|
-
spec.name
|
9
|
-
spec.version
|
10
|
-
spec.authors
|
11
|
-
spec.email
|
8
|
+
spec.name = "sidekiq_prometheus"
|
9
|
+
spec.version = SidekiqPrometheus::VERSION
|
10
|
+
spec.authors = ["Lukas Eklund", "NHM Tanveer Hossain Khan"]
|
11
|
+
spec.email = ["leklund@fastly.com"]
|
12
12
|
|
13
|
-
spec.summary
|
14
|
-
spec.homepage
|
15
|
-
spec.license
|
13
|
+
spec.summary = "Prometheus Instrumentation for Sidekiq"
|
14
|
+
spec.homepage = "https://github.com/fastly/sidekiq-prometheus"
|
15
|
+
spec.license = "MIT"
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
18
|
f.match(%r{^(test|spec|features)/})
|
19
19
|
end
|
20
|
-
spec.bindir
|
21
|
-
spec.executables
|
22
|
-
spec.require_paths = [
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
24
|
+
spec.add_development_dependency "bundler"
|
25
|
+
spec.add_development_dependency "pry"
|
26
|
+
spec.add_development_dependency "rake", "~> 12.3.3"
|
27
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
28
|
+
spec.add_development_dependency "standard"
|
29
29
|
|
30
|
-
spec.add_runtime_dependency
|
31
|
-
spec.add_runtime_dependency
|
32
|
-
spec.add_runtime_dependency
|
33
|
-
spec.add_runtime_dependency
|
30
|
+
spec.add_runtime_dependency "prometheus-client", ">= 2.0"
|
31
|
+
spec.add_runtime_dependency "rack"
|
32
|
+
spec.add_runtime_dependency "sidekiq", "> 5.1", "< 7.0"
|
33
|
+
spec.add_runtime_dependency "webrick"
|
34
34
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq_prometheus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Eklund
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-01-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -68,19 +68,19 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '3.0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: standard
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - "
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 0
|
76
|
+
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0
|
83
|
+
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: prometheus-client
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: '0'
|
190
190
|
requirements: []
|
191
|
-
rubygems_version: 3.1
|
191
|
+
rubygems_version: 3.4.1
|
192
192
|
signing_key:
|
193
193
|
specification_version: 4
|
194
194
|
summary: Prometheus Instrumentation for Sidekiq
|