lib/sidekiq/instrument/middleware/server.rb in sidekiq-instrument-0.6.2 vs lib/sidekiq/instrument/middleware/server.rb in sidekiq-instrument-0.7.0

- old
+ new

@@ -5,24 +5,42 @@ module Sidekiq::Instrument class ServerMiddleware include Sidekiq::Instrument::MetricNames - def call(worker, _job, _queue, &block) - Statter.statsd.increment(metric_name(worker, 'dequeue')) - Statter.dogstatsd&.increment('sidekiq.dequeue', worker_dog_options(worker)) + def call(worker, job, _queue, &block) + dequeue_string = is_retry(job) ? 'dequeue.retry' : 'dequeue' + Statter.dogstatsd&.increment("sidekiq.#{dequeue_string}", worker_dog_options(worker)) + Statter.statsd.increment(metric_name(worker, dequeue_string)) start_time = Time.now yield block execution_time_ms = (Time.now - start_time) * 1000 Statter.statsd.measure(metric_name(worker, 'runtime'), execution_time_ms) Statter.dogstatsd&.timing('sidekiq.runtime', execution_time_ms, worker_dog_options(worker)) rescue StandardError => e + # if we have retries left, increment the enqueue.retry counter to indicate the job is going back on the queue + if max_retries(worker) > current_retries(job) + 1 + WorkerMetrics.trace_workers_increment_counter(worker.class.to_s.underscore) + Statter.dogstatsd&.increment('sidekiq.enqueue.retry', worker_dog_options(worker)) + end + Statter.statsd.increment(metric_name(worker, 'error')) Statter.dogstatsd&.increment('sidekiq.error', worker_dog_options(worker)) raise e ensure WorkerMetrics.trace_workers_decrement_counter(worker.class.to_s.underscore) Statter.dogstatsd&.flush(sync: true) + end + + private + + # returns -1 if no retries have been attempted + def current_retries(job) + job["retry_count"] || -1 + end + + def is_retry(job) + current_retries(job) >= 0 end end end