Sha256: cb32898b8a95f514668de5b2e6ed50185efaef7bfb352e93745acdfdf206c197

Contents?: true

Size: 1.21 KB

Versions: 9

Compression:

Stored size: 1.21 KB

Contents

module Sentry
  module Sidekiq
    class ContextFilter
      ACTIVEJOB_RESERVED_PREFIX_REGEX = /^_aj_/.freeze

      def initialize
        @has_global_id = defined?(GlobalID)
      end

      # 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
          if has_global_id? && context.is_a?(GlobalID)
            context.to_s
          else
            context
          end
        end
      end

      private

      def filter_context_hash(key, value)
        key = key.to_s.sub(ACTIVEJOB_RESERVED_PREFIX_REGEX, "") if key.match(ACTIVEJOB_RESERVED_PREFIX_REGEX)
        [key, filter_context(value)]
      end

      def has_global_id?
        @has_global_id
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
sentry-sidekiq-4.1.3 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-4.1.2 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-4.1.1 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-4.1.0 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-4.0.0 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-0.2.0 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-0.1.3 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-0.1.2 lib/sentry/sidekiq/context_filter.rb
sentry-sidekiq-0.1.1 lib/sentry/sidekiq/context_filter.rb