diff options
author | Alex Kalderimis <akalderimis@gitlab.com> | 2019-08-19 23:06:21 +0000 |
---|---|---|
committer | Thong Kuah <tkuah@gitlab.com> | 2019-08-19 23:06:21 +0000 |
commit | 2cbcab467962df8ee1bad63927c7c46b78cedd37 (patch) | |
tree | 330ff3088c0551dd5f26954463d91c38a927391b /lib | |
parent | d4a5e3fd8746a3af2d57060d304b760e7539d752 (diff) | |
download | gitlab-ce-2cbcab467962df8ee1bad63927c7c46b78cedd37.tar.gz |
Add support for sentry_extra_data in exceptions
This allows exceptions to advertise their support for sentry
and provide structured data.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/sentry.rb | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/gitlab/sentry.rb b/lib/gitlab/sentry.rb index 764db14d720..005cb3112b8 100644 --- a/lib/gitlab/sentry.rb +++ b/lib/gitlab/sentry.rb @@ -39,9 +39,14 @@ module Gitlab # development and test. If you need development and test to behave # just the same as production you can use this instead of # track_exception. + # + # If the exception implements the method `sentry_extra_data` and that method + # returns a Hash, then the return value of that method will be merged into + # `extra`. Exceptions can use this mechanism to provide structured data + # to sentry in addition to their message and back-trace. def self.track_acceptable_exception(exception, issue_url: nil, extra: {}) if enabled? - extra[:issue_url] = issue_url if issue_url + extra = build_extra_data(exception, issue_url, extra) context # Make sure we've set everything we know in the context Raven.capture_exception(exception, tags: default_tags, extra: extra) @@ -58,5 +63,15 @@ module Gitlab locale: I18n.locale } end + + def self.build_extra_data(exception, issue_url, extra) + exception.try(:sentry_extra_data)&.tap do |data| + extra.merge!(data) if data.is_a?(Hash) + end + + extra.merge({ issue_url: issue_url }.compact) + end + + private_class_method :build_extra_data end end |