class Loggery::Metadata::Middleware::Sidekiq

Attributes

error_handler[RW]

Public Instance Methods

call(_worker, message, queue) { || ... } click to toggle source
# File lib/loggery/metadata/middleware/sidekiq.rb, line 16
def call(_worker, message, queue)
  Loggery::Metadata::Store.with_metadata(build_metadata(message, queue)) do
    job_instance_name = "#{message['class']} (#{message['args']})"
    log_job_start(message, job_instance_name)

    log_job_runtime(:sidekiq_job, job_instance_name) do
      yield
    rescue StandardError => e
      # Log exceptions here, otherwise they won't have the metadata available anymore by
      # the time they reach the Sidekiq default error handler.
      self.class.error_handler&.call(e)
      raise e
    end
  end
end

Private Instance Methods

build_metadata(message, queue) click to toggle source
# File lib/loggery/metadata/middleware/sidekiq.rb, line 34
def build_metadata(message, queue)
  {
    jid:         message["jid"],
    thread_id:   Thread.current.object_id.to_s(36),
    worker:      message["class"],
    args:        message["args"].inspect,
    queue:       queue,
    retry_count: message["retry_count"],
    worker_type: "sidekiq"
  }
end
log_job_start(message, job_instance_name) click to toggle source
# File lib/loggery/metadata/middleware/sidekiq.rb, line 46
def log_job_start(message, job_instance_name)
  execution_delay =
    (Time.current - Time.zone.at(message["enqueued_at"]) if message["enqueued_at"])

  Rails.logger.info(
    event_type:      :sidekiq_job_started,
    message:         "Job type sidekiq_job - #{job_instance_name} started",
    execution_delay: execution_delay
  )
end