lib/raven/integrations/sidekiq.rb in sentry-raven-3.0.4 vs lib/raven/integrations/sidekiq.rb in sentry-raven-3.1.0

- old
+ new

@@ -1,87 +1,13 @@ require 'time' require 'sidekiq' +require 'raven/integrations/sidekiq/cleanup_middleware' +require 'raven/integrations/sidekiq/error_handler' -module Raven - class SidekiqCleanupMiddleware - def call(_worker, job, queue) - Raven.context.transaction.push "Sidekiq/#{job['class']}" - Raven.extra_context(:sidekiq => job.merge("queue" => queue)) - yield - Context.clear! - BreadcrumbBuffer.clear! - end - end - - class SidekiqErrorHandler - ACTIVEJOB_RESERVED_PREFIX = "_aj_".freeze - HAS_GLOBALID = const_defined?('GlobalID') - - def call(ex, context) - context = filter_context(context) - Raven.context.transaction.push transaction_from_context(context) - Raven.capture_exception( - ex, - :message => ex.message, - :extra => { :sidekiq => context } - ) - Context.clear! - BreadcrumbBuffer.clear! - end - - private - - # Once an ActiveJob is queued, ActiveRecord references get serialized into - # some internal reserved keys, such as _aj_globalid. - # - # The problem is, if this job in turn gets queued back into ActiveJob with - # these magic reserved keys, ActiveJob will throw up and error. We want to - # capture these and mutate the keys so we can sanely report it. - def filter_context(context) - case context - when Array - context.map { |arg| filter_context(arg) } - when Hash - Hash[context.map { |key, value| filter_context_hash(key, value) }] - else - format_globalid(context) - end - end - - def filter_context_hash(key, value) - (key = key[3..-1]) if key [0..3] == ACTIVEJOB_RESERVED_PREFIX - [key, filter_context(value)] - end - - # this will change in the future: - # https://github.com/mperham/sidekiq/pull/3161 - def transaction_from_context(context) - classname = (context["wrapped"] || context["class"] || - (context[:job] && (context[:job]["wrapped"] || context[:job]["class"])) - ) - if classname - "Sidekiq/#{classname}" - elsif context[:event] - "Sidekiq/#{context[:event]}" - else - "Sidekiq" - end - end - - def format_globalid(context) - if HAS_GLOBALID && context.is_a?(GlobalID) - context.to_s - else - context - end - end - end -end - if Sidekiq::VERSION > '3' Sidekiq.configure_server do |config| - config.error_handlers << Raven::SidekiqErrorHandler.new + config.error_handlers << Raven::Sidekiq::ErrorHandler.new config.server_middleware do |chain| - chain.add Raven::SidekiqCleanupMiddleware + chain.add Raven::Sidekiq::CleanupMiddleware end end end