Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-06-12 15:08:56 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-06-12 15:08:56 +0300
commit3ef9553486f5be24b6845fd10fc7e21e8121dedd (patch)
treebf23ad6dcf7ae0dc669df68caeeac660b9b29485 /lib/gitlab/error_tracking
parent6be19afab70e2a5cc7bfc557663f115f43c105b5 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/error_tracking')
-rw-r--r--lib/gitlab/error_tracking/processor/sidekiq_processor.rb66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/gitlab/error_tracking/processor/sidekiq_processor.rb b/lib/gitlab/error_tracking/processor/sidekiq_processor.rb
new file mode 100644
index 00000000000..272cb689ad5
--- /dev/null
+++ b/lib/gitlab/error_tracking/processor/sidekiq_processor.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+require 'set'
+
+module Gitlab
+ module ErrorTracking
+ module Processor
+ class SidekiqProcessor < ::Raven::Processor
+ FILTERED_STRING = '[FILTERED]'
+
+ def self.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
+
+ def self.permitted_arguments_for_worker(klass)
+ @permitted_arguments_for_worker ||= {}
+ @permitted_arguments_for_worker[klass] ||=
+ begin
+ klass.constantize&.loggable_arguments&.to_set
+ rescue
+ Set.new
+ end
+ end
+
+ def self.loggable_arguments(args, klass)
+ Gitlab::Utils::LogLimitedArray
+ .log_limited_array(filter_arguments(args, klass))
+ .map(&:to_s)
+ .to_a
+ end
+
+ def process(value, key = nil)
+ sidekiq = value.dig(:extra, :sidekiq)
+
+ return value 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]
+
+ if job_holder['args']
+ job_holder['args'] = self.class.filter_arguments(job_holder['args'], job_holder['class']).to_a
+ end
+
+ value[:extra][:sidekiq] = sidekiq
+
+ value
+ end
+ end
+ end
+ end
+end