Module: Gitlab::ErrorTracking::Processor::SidekiqProcessor

Defined in:
lib/gitlab/error_tracking/processor/sidekiq_processor.rb

Constant Summary collapse

FILTERED_STRING =
'[FILTERED]'

Class Method Summary collapse

Class Method Details

.call(event) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/gitlab/error_tracking/processor/sidekiq_processor.rb', line 44

def call(event)
  sidekiq = event&.extra&.dig(:sidekiq)

  return event unless sidekiq

  sidekiq = sidekiq.deep_dup
  sidekiq.delete(:jobstr)

  # 'args' in this hash => from Gitlab::ErrorTracking.track_*
  # 'args' in :job => from default error handler
  job_holder = sidekiq.key?('args') ? sidekiq : sidekiq[:job]

  return event unless job_holder

  if job_holder['args']
    job_holder['args'] = filter_arguments(job_holder['args'], job_holder['class']).to_a
  end

  event.extra[:sidekiq] = sidekiq

  event
end

.filter_arguments(args, klass) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/gitlab/error_tracking/processor/sidekiq_processor.rb', line 12

def filter_arguments(args, klass)
  args.lazy.with_index.map do |arg, i|
    case arg
    when Numeric
      arg
    else
      if permitted_arguments_for_worker(klass).include?(i)
        arg
      else
        FILTERED_STRING
      end
    end
  end
end

.loggable_arguments(args, klass) ⇒ Object



37
38
39
40
41
42
# File 'lib/gitlab/error_tracking/processor/sidekiq_processor.rb', line 37

def loggable_arguments(args, klass)
  Gitlab::Utils::LogLimitedArray
    .log_limited_array(filter_arguments(args, klass))
    .map(&:to_s)
    .to_a
end

.permitted_arguments_for_worker(klass) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/gitlab/error_tracking/processor/sidekiq_processor.rb', line 27

def permitted_arguments_for_worker(klass)
  @permitted_arguments_for_worker ||= {}
  @permitted_arguments_for_worker[klass] ||=
    begin
      klass.constantize&.loggable_arguments&.to_set
    rescue StandardError
      Set.new
    end
end