Sha256: b4d52a0e5f60275a8e616f29744d7809521d77d5c9bcfb9beeb795bc4b7c84c5

Contents?: true

Size: 1.49 KB

Versions: 5

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

module Yabeda
  module Sidekiq
    # Sidekiq worker middleware
    class ServerMiddleware
      # See https://github.com/mperham/sidekiq/discussions/4971
      JOB_RECORD_CLASS = defined?(::Sidekiq::JobRecord) ? ::Sidekiq::JobRecord : ::Sidekiq::Job

      # rubocop: disable Metrics/AbcSize, Metrics/MethodLength:
      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
      # rubocop: enable Metrics/AbcSize, Metrics/MethodLength:

      private

      def elapsed(start)
        (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).round(3)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
yabeda-sidekiq-0.11.0 lib/yabeda/sidekiq/server_middleware.rb
yabeda-sidekiq-0.10.0 lib/yabeda/sidekiq/server_middleware.rb
yabeda-sidekiq-0.9.0 lib/yabeda/sidekiq/server_middleware.rb
yabeda-sidekiq-0.8.2 lib/yabeda/sidekiq/server_middleware.rb
yabeda-sidekiq-0.8.1 lib/yabeda/sidekiq/server_middleware.rb