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



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

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



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

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



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

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



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

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