Sha256: dda6ea1fc2a2490a8cf58a44e801589b1caf538fae43a66f5c94cd0d88400a71

Contents?: true

Size: 1.58 KB

Versions: 40

Compression:

Stored size: 1.58 KB

Contents

module Appsignal
  class Hooks
    class SidekiqPlugin
      include Appsignal::Hooks::Helpers

      def job_keys
        @job_keys ||= Set.new(%w(
            class args retried_at failed_at
            error_message error_class backtrace
            error_backtrace enqueued_at retry
            jid retry created_at wrapped
        ))
      end

      def call(worker, item, queue)
        if item['class'] == 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper'
          params = format_args(item['args'].first['arguments'])
        else
          params = format_args(item['args'])
        end

        Appsignal.monitor_transaction(
          'perform_job.sidekiq',
          :class       => item['wrapped'] || item['class'],
          :method      => 'perform',
          :metadata    => formatted_metadata(item),
          :params      => params,
          :queue_start => item['enqueued_at'],
          :queue_time  => (Time.now.to_f - item['enqueued_at'].to_f) * 1000
        ) do
          yield
        end
      end

      def formatted_metadata(item)
        {}.tap do |hsh|
          item.each do |key, val|
            hsh[key] = truncate(string_or_inspect(val)) unless job_keys.include?(key)
          end
        end
      end
    end

    class SidekiqHook < Appsignal::Hooks::Hook
      register :sidekiq

      def dependencies_present?
        defined?(::Sidekiq)
      end

      def install
        ::Sidekiq.configure_server do |config|
          config.server_middleware do |chain|
            chain.add Appsignal::Hooks::SidekiqPlugin
          end
        end
      end
    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
appsignal-2.0.6 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.5 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.5.beta.1 lib/appsignal/hooks/sidekiq.rb
appsignal-2.1.0.alpha.3 lib/appsignal/hooks/sidekiq.rb
appsignal-2.1.0.alpha.2 lib/appsignal/hooks/sidekiq.rb
appsignal-2.1.0.alpha.1 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.4 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.3 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.2 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.1 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.0 lib/appsignal/hooks/sidekiq.rb
appsignal-2.0.0.beta.1 lib/appsignal/hooks/sidekiq.rb
appsignal-1.4.0.beta.1 lib/appsignal/hooks/sidekiq.rb
appsignal-1.3.6 lib/appsignal/hooks/sidekiq.rb
appsignal-1.3.6.beta.1 lib/appsignal/hooks/sidekiq.rb
appsignal-1.3.5 lib/appsignal/hooks/sidekiq.rb
appsignal-1.3.5.beta.1 lib/appsignal/hooks/sidekiq.rb
appsignal-1.3.4 lib/appsignal/hooks/sidekiq.rb
appsignal-1.3.3 lib/appsignal/hooks/sidekiq.rb
appsignal-1.4.0.alpha.2 lib/appsignal/hooks/sidekiq.rb