sidekiq-instrument 0.7.2 → 0.7.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15f6647c70a9728ad1feb253f921cc68994a32256de015a1c45f147b6aff72ec
4
- data.tar.gz: c645b679c715dfe90a6713e56a9b2f3720105ffc065249e7eaec9a614e3e67b9
3
+ metadata.gz: c29103ed3ffc948efe59b49ff4df569bf52a6ced1a953ea9ada47a251b2a2d63
4
+ data.tar.gz: 1da9a28a99b77c92699a1cbbdccaf2cc7cd95d11a925d2099858ad5ffa616444
5
5
  SHA512:
6
- metadata.gz: 957b8590030205b27196985aed50e0b4801772ea8a1a7b25f30bc98cb369c8d623b49936d3acd974b5be703925eee0d6f790abffc7b2b05e71bcd481a098399f
7
- data.tar.gz: ed94944e7cf926f9f54056d072c493d111ad7070da3917f8650d282f045da8ecd4a2547ffb0789a3ce2e49f40ecd6c4a88b1175adf10dbf5dda2194eb1b23b2f
6
+ metadata.gz: e28f76f957396f1fa28fbe3f0ca737da2443b5bc70487d0389944454dce6720213257eae502c58b056640ad58388d0787c14eb2b5405217aa97766a7c5cb7a0f
7
+ data.tar.gz: f99843e887127800d81453e4d569b676ed0a67091d5636d078fc39367bf827d459a1dca21e75d6171cec98799825f72b403ed0358f90dfbda80abcbe6060a7be
data/README.md CHANGED
@@ -75,16 +75,18 @@ Sidekiq::Instrument::WorkerMetrics.namespace = <APP_NAME>
75
75
  ## StatsD Keys
76
76
  For each job, the following metrics will be reported:
77
77
 
78
- 1. **shared.sidekiq._queue_._job_.enqueue**: counter incremented each time a
78
+ 1. **shared.sidekiq._queue_._job_.schedule**: counter incremented each time a
79
+ job is scheduled to be pushed onto the queue later.
80
+ 2. **shared.sidekiq._queue_._job_.enqueue**: counter incremented each time a
79
81
  job is pushed onto the queue.
80
- 2. **shared.sidekiq._queue_._job_.dequeue**: counter incremented just before
82
+ 3. **shared.sidekiq._queue_._job_.dequeue**: counter incremented just before
81
83
  worker begins performing a job.
82
- 3. **shared.sidekiq._queue_._job_.runtime**: timer of the total time spent
84
+ 4. **shared.sidekiq._queue_._job_.runtime**: timer of the total time spent
83
85
  in `perform`, in milliseconds.
84
- 4. **shared.sidekiq._queue_._job_.error**: counter incremented each time a
86
+ 5. **shared.sidekiq._queue_._job_.error**: counter incremented each time a
85
87
  job fails.
86
88
 
87
- For job retry attempts, the above 4 metrics will still be reported but the enqueue/dequeue metrics
89
+ For job retry attempts, metrics 2-5 will still be reported but the enqueue/dequeue metrics
88
90
  will have a `.retry` appended:
89
91
 
90
92
  1. **shared.sidekiq._queue_._job_.enqueue.retry**
@@ -103,13 +105,15 @@ For each worker, the following metrics and tags will be reported:
103
105
  ## DogStatsD Keys
104
106
  For each job, the following metrics and tags will be reported:
105
107
 
106
- 1. **sidekiq.enqueue (tags: {queue: _queue_, worker: _job_})**: counter incremented each time a
108
+ 1. **sidekiq.schedule (tags: {queue: _queue_, worker: _job_})**: counter incremented each time a
109
+ job is scheduled to be pushed onto the queue later.
110
+ 2. **sidekiq.enqueue (tags: {queue: _queue_, worker: _job_})**: counter incremented each time a
107
111
  job is pushed onto the queue.
108
- 2. **sidekiq.dequeue (tags: {queue: _queue_, worker: _job_})**: counter incremented just before
112
+ 3. **sidekiq.dequeue (tags: {queue: _queue_, worker: _job_})**: counter incremented just before
109
113
  worker begins performing a job.
110
- 3. **sidekiq.runtime (tags: {queue: _queue_, worker: _job_})**: timer of the total time spent
114
+ 4. **sidekiq.runtime (tags: {queue: _queue_, worker: _job_})**: timer of the total time spent
111
115
  in `perform`, in milliseconds.
112
- 4. **sidekiq.error (tags: {queue: _queue_, worker: _job_})**: counter incremented each time a
116
+ 5. **sidekiq.error (tags: {queue: _queue_, worker: _job_, error: _errorclass_})**: counter incremented each time a
113
117
  job fails.
114
118
 
115
119
  For job retry attempts, the above 4 metrics will still be reported but the enqueue/dequeue metrics
@@ -127,7 +131,7 @@ For each worker, the following metrics and tags will be reported:
127
131
 
128
132
  ## Worker
129
133
 
130
- **WARNING: The metrics reported by this Worker are currently inaccurate.**
134
+ **WARNING: The Redis count metrics reported by this Worker are currently inaccurate.**
131
135
 
132
136
  There is a worker, `Sidekiq::Instrument::Worker`, that submits gauges
133
137
  for various interesting statistics; namely, the bulk of the information in `Sidekiq::Stats`
@@ -12,15 +12,21 @@ module Sidekiq::Instrument
12
12
  klass = Object.const_get(worker_class.to_s)
13
13
  class_instance = klass.new
14
14
 
15
- # This is needed because the ClientMiddleware is called twice for scheduled jobs
16
- # - Once when it gets scheduled
17
- # - Once when it gets dequeued for processing
18
- # We only want to increment the enqueue metric when the job is scheduled and
19
- # Sidekiq::Context.current[:class] is only ever set when the job is scheduled
20
- if Sidekiq::Context.current[:class].present?
15
+ # Depending on the type of perform called, this method can be hit either
16
+ # once or twice for the same Job ID.
17
+ #
18
+ # perform_async:
19
+ # - once when it is enqueued, with no job['at'] key
20
+ # perform_in:
21
+ # - once when it is scheduled, with job['at'] key
22
+ # - once when it is enqueued, without job['at'] key
23
+ if job['at'].present?
24
+ Statter.statsd.increment(metric_name(class_instance, 'schedule'))
25
+ Statter.dogstatsd&.increment('sidekiq.schedule', worker_dog_options(class_instance, job))
26
+ else
21
27
  WorkerMetrics.trace_workers_increment_counter(klass.name.underscore)
22
28
  Statter.statsd.increment(metric_name(class_instance, 'enqueue'))
23
- Statter.dogstatsd&.increment('sidekiq.enqueue', worker_dog_options(class_instance))
29
+ Statter.dogstatsd&.increment('sidekiq.enqueue', worker_dog_options(class_instance, job))
24
30
  end
25
31
 
26
32
  Statter.dogstatsd&.flush(sync: true)
@@ -9,16 +9,16 @@ module Sidekiq::Instrument
9
9
 
10
10
  def call(worker, job, _queue, &block)
11
11
  dequeue_string = is_retry(job) ? 'dequeue.retry' : 'dequeue'
12
- Statter.dogstatsd&.increment("sidekiq.#{dequeue_string}", worker_dog_options(worker))
12
+ Statter.dogstatsd&.increment("sidekiq.#{dequeue_string}", worker_dog_options(worker, job))
13
13
  Statter.statsd.increment(metric_name(worker, dequeue_string))
14
14
 
15
15
  start_time = Time.now
16
16
  yield block
17
17
  execution_time_ms = (Time.now - start_time) * 1000
18
- Statter.dogstatsd&.timing('sidekiq.runtime', execution_time_ms, worker_dog_options(worker))
18
+ Statter.dogstatsd&.timing('sidekiq.runtime', execution_time_ms, worker_dog_options(worker, job))
19
19
  Statter.statsd.measure(metric_name(worker, 'runtime'), execution_time_ms)
20
20
  rescue Exception => e
21
- dd_options = worker_dog_options(worker)
21
+ dd_options = worker_dog_options(worker, job)
22
22
  dd_options[:tags] << "error:#{e.class.name}"
23
23
 
24
24
  # if we have retries left, increment the enqueue.retry counter to indicate the job is going back on the queue
@@ -8,8 +8,13 @@ module Sidekiq::Instrument
8
8
  end
9
9
  end
10
10
 
11
- def worker_dog_options(worker)
12
- { tags: ["queue:#{queue_name(worker)}", "worker:#{underscore(class_name(worker))}"] }
11
+ def worker_dog_options(worker, job)
12
+ {
13
+ tags: [
14
+ "queue:#{queue_name(worker)}",
15
+ "worker:#{underscore(class_name(worker))}"
16
+ ].concat(job.fetch('tags', []))
17
+ }
13
18
  end
14
19
 
15
20
  def max_retries(worker)
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Instrument
3
- VERSION = '0.7.2'
3
+ VERSION = '0.7.4'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-instrument
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loan Application Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-09 00:00:00.000000000 Z
11
+ date: 2024-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -242,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
242
  - !ruby/object:Gem::Version
243
243
  version: '0'
244
244
  requirements: []
245
- rubygems_version: 3.3.26
245
+ rubygems_version: 3.3.7
246
246
  signing_key:
247
247
  specification_version: 4
248
248
  summary: StatsD & DogStatsD Instrumentation for Sidekiq