summaryrefslogtreecommitdiff
path: root/lib/gitlab/error_tracking
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 15:44:42 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 15:44:42 +0000
commit4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch)
tree5423a1c7516cffe36384133ade12572cf709398d /lib/gitlab/error_tracking
parente570267f2f6b326480d284e0164a6464ba4081bc (diff)
downloadgitlab-ce-4555e1b21c365ed8303ffb7a3325d773c9b8bf31.tar.gz
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'lib/gitlab/error_tracking')
-rw-r--r--lib/gitlab/error_tracking/context_payload_generator.rb2
-rw-r--r--lib/gitlab/error_tracking/processor/context_payload_processor.rb11
-rw-r--r--lib/gitlab/error_tracking/processor/grpc_error_processor.rb76
-rw-r--r--lib/gitlab/error_tracking/processor/sidekiq_processor.rb29
4 files changed, 15 insertions, 103 deletions
diff --git a/lib/gitlab/error_tracking/context_payload_generator.rb b/lib/gitlab/error_tracking/context_payload_generator.rb
index c99283b3d20..3d0a707608f 100644
--- a/lib/gitlab/error_tracking/context_payload_generator.rb
+++ b/lib/gitlab/error_tracking/context_payload_generator.rb
@@ -49,7 +49,7 @@ module Gitlab
# Static tags that are set on application start
def extra_tags_from_env
Gitlab::Json.parse(ENV.fetch('GITLAB_SENTRY_EXTRA_TAGS', '{}')).to_hash
- rescue => e
+ rescue StandardError => e
Gitlab::AppLogger.debug("GITLAB_SENTRY_EXTRA_TAGS could not be parsed as JSON: #{e.class.name}: #{e.message}")
{}
diff --git a/lib/gitlab/error_tracking/processor/context_payload_processor.rb b/lib/gitlab/error_tracking/processor/context_payload_processor.rb
index 758f6aa11d7..9559d6807da 100644
--- a/lib/gitlab/error_tracking/processor/context_payload_processor.rb
+++ b/lib/gitlab/error_tracking/processor/context_payload_processor.rb
@@ -3,21 +3,12 @@
module Gitlab
module ErrorTracking
module Processor
- class ContextPayloadProcessor < ::Raven::Processor
+ module ContextPayloadProcessor
# This processor is added to inject application context into Sentry
# events generated by Sentry built-in integrations. When the
# integrations are re-implemented and use Gitlab::ErrorTracking, this
# processor should be removed.
- def process(payload)
- return payload if ::Feature.enabled?(:sentry_processors_before_send, default_enabled: :yaml)
-
- context_payload = Gitlab::ErrorTracking::ContextPayloadGenerator.generate(nil, {})
- payload.deep_merge!(context_payload)
- end
-
def self.call(event)
- return event unless ::Feature.enabled?(:sentry_processors_before_send, default_enabled: :yaml)
-
Gitlab::ErrorTracking::ContextPayloadGenerator.generate(nil, {}).each do |key, value|
event.public_send(key).deep_merge!(value) # rubocop:disable GitlabSecurity/PublicSend
end
diff --git a/lib/gitlab/error_tracking/processor/grpc_error_processor.rb b/lib/gitlab/error_tracking/processor/grpc_error_processor.rb
index 419098dbd09..e2a9192806f 100644
--- a/lib/gitlab/error_tracking/processor/grpc_error_processor.rb
+++ b/lib/gitlab/error_tracking/processor/grpc_error_processor.rb
@@ -3,22 +3,11 @@
module Gitlab
module ErrorTracking
module Processor
- class GrpcErrorProcessor < ::Raven::Processor
+ module GrpcErrorProcessor
DEBUG_ERROR_STRING_REGEX = RE2('(.*) debug_error_string:(.*)')
- def process(payload)
- return payload if ::Feature.enabled?(:sentry_processors_before_send, default_enabled: :yaml)
-
- self.class.process_first_exception_value(payload)
- self.class.process_custom_fingerprint(payload)
-
- payload
- end
-
class << self
def call(event)
- return event unless ::Feature.enabled?(:sentry_processors_before_send, default_enabled: :yaml)
-
process_first_exception_value(event)
process_custom_fingerprint(event)
@@ -27,8 +16,9 @@ module Gitlab
# Sentry can report multiple exceptions in an event. Sanitize
# only the first one since that's what is used for grouping.
- def process_first_exception_value(event_or_payload)
- exceptions = exceptions(event_or_payload)
+ def process_first_exception_value(event)
+ # Better in new version, will be event.exception.values
+ exceptions = event.instance_variable_get(:@interfaces)[:exception]&.values
return unless exceptions.is_a?(Array)
@@ -36,18 +26,21 @@ module Gitlab
return unless valid_exception?(exception)
- exception_type, raw_message = type_and_value(exception)
+ raw_message = exception.value
- return unless exception_type&.start_with?('GRPC::')
+ return unless exception.type&.start_with?('GRPC::')
return unless raw_message.present?
message, debug_str = split_debug_error_string(raw_message)
- set_new_values!(event_or_payload, exception, message, debug_str)
+ # Worse in new version, no setter! Have to poke at the
+ # instance variable
+ exception.value = message if message
+ event.extra[:grpc_debug_error_string] = debug_str if debug_str
end
def process_custom_fingerprint(event)
- fingerprint = fingerprint(event)
+ fingerprint = event.fingerprint
return event unless custom_grpc_fingerprint?(fingerprint)
@@ -71,61 +64,14 @@ module Gitlab
[match[1], match[2]]
end
- # The below methods can be removed once we remove the
- # sentry_processors_before_send feature flag, and we can
- # assume we always have an Event object
- def exceptions(event_or_payload)
- case event_or_payload
- when Raven::Event
- # Better in new version, will be event_or_payload.exception.values
- event_or_payload.instance_variable_get(:@interfaces)[:exception]&.values
- when Hash
- event_or_payload.dig(:exception, :values)
- end
- end
-
def valid_exception?(exception)
case exception
when Raven::SingleExceptionInterface
exception&.value
- when Hash
- true
else
false
end
end
-
- def type_and_value(exception)
- case exception
- when Raven::SingleExceptionInterface
- [exception.type, exception.value]
- when Hash
- exception.values_at(:type, :value)
- end
- end
-
- def set_new_values!(event_or_payload, exception, message, debug_str)
- case event_or_payload
- when Raven::Event
- # Worse in new version, no setter! Have to poke at the
- # instance variable
- exception.value = message if message
- event_or_payload.extra[:grpc_debug_error_string] = debug_str if debug_str
- when Hash
- exception[:value] = message if message
- extra = event_or_payload[:extra] || {}
- extra[:grpc_debug_error_string] = debug_str if debug_str
- end
- end
-
- def fingerprint(event_or_payload)
- case event_or_payload
- when Raven::Event
- event_or_payload.fingerprint
- when Hash
- event_or_payload[:fingerprint]
- end
- end
end
end
end
diff --git a/lib/gitlab/error_tracking/processor/sidekiq_processor.rb b/lib/gitlab/error_tracking/processor/sidekiq_processor.rb
index 93310745ece..0d2f673d73c 100644
--- a/lib/gitlab/error_tracking/processor/sidekiq_processor.rb
+++ b/lib/gitlab/error_tracking/processor/sidekiq_processor.rb
@@ -5,7 +5,7 @@ require 'set'
module Gitlab
module ErrorTracking
module Processor
- class SidekiqProcessor < ::Raven::Processor
+ module SidekiqProcessor
FILTERED_STRING = '[FILTERED]'
class << self
@@ -29,7 +29,7 @@ module Gitlab
@permitted_arguments_for_worker[klass] ||=
begin
klass.constantize&.loggable_arguments&.to_set
- rescue
+ rescue StandardError
Set.new
end
end
@@ -42,8 +42,6 @@ module Gitlab
end
def call(event)
- return event unless ::Feature.enabled?(:sentry_processors_before_send, default_enabled: :yaml)
-
sidekiq = event&.extra&.dig(:sidekiq)
return event unless sidekiq
@@ -64,29 +62,6 @@ module Gitlab
event
end
end
-
- def process(value, key = nil)
- return value if ::Feature.enabled?(:sentry_processors_before_send, default_enabled: :yaml)
-
- 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