Sha256: 1ad05a75e3401eb60413efef9d816731f0d5e632b58e69b05c8460f5eb7f68b0

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

# frozen_string_literal: true

module SpartanAPM
  module Middleware
    module Sidekiq
      # Middleware that should be added to the start of the start of the middleware chain.
      class StartMiddleware
        def call(worker, msg, queue, &block)
          if SpartanAPM.ignore_request?("sidekiq", worker.class.name)
            yield
          else
            start_time = Time.now.to_f

            # This value is used in EndMiddleware to capture how long all the middleware
            # between the two middlewares took to execute.
            msg["spartan_apm.middleware_start_time"] = start_time

            SpartanAPM.measure("sidekiq", worker.class.name) do
              begin
                yield
              ensure
                # Capture how long the message was enqueued in Redis before a worker got the job.
                enqueued_time = msg["enqueued_at"].to_f if msg.is_a?(Hash)
                if enqueued_time && enqueued_time > 0 && start_time > enqueued_time
                  SpartanAPM.capture_time(:queue, start_time - enqueued_time)
                end
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spartan_apm-0.0.0.rc1 lib/spartan_apm/middleware/sidekiq/start_middleware.rb