Sha256: af8e70ce9006fd56e443143de2cbd8be5818ea8240fb89fb3562b5c9a2171803

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module Skylight
  module Sidekiq
    def self.add_middleware
      unless defined?(::Sidekiq)
        Skylight.warn "Skylight for Sidekiq is active, but Sidekiq is not defined."
        return
      end

      ::Sidekiq.configure_server do |sidekiq_config|
        Skylight.debug "Adding Sidekiq Middleware"

        sidekiq_config.server_middleware do |chain|
          # Put it at the front
          chain.prepend ServerMiddleware
        end
      end
    end

    class ServerMiddleware
      include Util::Logging

      def call(_worker, job, queue)
        t { "Sidekiq middleware beginning trace" }
        title = job["wrapped"] || job["class"]
        Skylight.trace(title, "app.sidekiq.worker", title, segment: queue, component: :worker) do |trace|
          begin
            yield
          rescue Exception # includes Sidekiq::Shutdown
            trace.segment = "error" if trace
            raise
          end
        end
      end
    end

    ActiveSupport::Notifications.subscribe("started_instrumenter.skylight") \
        do |_name, _started, _finished, _unique_id, payload|
      if payload[:instrumenter].config.enable_sidekiq?
        add_middleware
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
skylight-5.0.0.beta lib/skylight/sidekiq.rb