lib/loggery/metadata/middleware/sidekiq.rb in loggery-0.1.0 vs lib/loggery/metadata/middleware/sidekiq.rb in loggery-0.2.0

- old
+ new

@@ -11,28 +11,50 @@ # Clients can provide their own error handler class << self attr_accessor(:error_handler) { ->(e) { Sidekiq::Logging.logger.error(e) } } end - def call(_worker, msg, queue) - Loggery::Metadata::Store.with_metadata(jid: msg["jid"], - thread_id: Thread.current.object_id.to_s(36), - worker: msg["class"], - args: msg["args"].inspect, - queue: queue, - retry_count: msg["retry_count"], - worker_type: "sidekiq") do - log_job_runtime(:sidekiq_job, "#{msg['class']} (#{msg['args']})") do + 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 begin 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 + end + + private + + 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 + + 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 end end end end