class Yabeda::Sidekiq::ServerMiddleware

Sidekiq worker middleware

Constants

JOB_RECORD_CLASS

See github.com/mperham/sidekiq/discussions/4971

Public Instance Methods

call(worker, job, queue) { || ... } click to toggle source

rubocop: disable Metrics/AbcSize, Metrics/MethodLength:

# File lib/yabeda/sidekiq/server_middleware.rb, line 11
def call(worker, job, queue)
  custom_tags = Yabeda::Sidekiq.custom_tags(worker, job).to_h
  labels = Yabeda::Sidekiq.labelize(worker, job, queue).merge(custom_tags)
  start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  begin
    job_instance = JOB_RECORD_CLASS.new(job)
    Yabeda.sidekiq_job_latency.measure(labels, job_instance.latency)
    Yabeda::Sidekiq.jobs_started_at[labels][job["jid"]] = start
    Yabeda.with_tags(**custom_tags) do
      yield
    end
    Yabeda.sidekiq_jobs_success_total.increment(labels)
  rescue Exception # rubocop: disable Lint/RescueException
    Yabeda.sidekiq_jobs_failed_total.increment(labels)
    raise
  ensure
    Yabeda.sidekiq_job_runtime.measure(labels, elapsed(start))
    Yabeda.sidekiq_jobs_executed_total.increment(labels)
    Yabeda::Sidekiq.jobs_started_at[labels].delete(job["jid"])
  end
end

Private Instance Methods

elapsed(start) click to toggle source

rubocop: enable Metrics/AbcSize, Metrics/MethodLength:

# File lib/yabeda/sidekiq/server_middleware.rb, line 36
def elapsed(start)
  (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).round(3)
end