diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-07 21:07:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-07 21:07:50 +0000 |
commit | d203316c80aa27cf747aa29df9f7c2d374965b5f (patch) | |
tree | aab5cde76fbf19a2639f6f9f3cb4f2acdc95f803 /lib/sentry/client | |
parent | 8dafc3b65aeb8f50fdfc38fb98d96c3db9e2f607 (diff) | |
download | gitlab-ce-d203316c80aa27cf747aa29df9f7c2d374965b5f.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/sentry/client')
-rw-r--r-- | lib/sentry/client/event.rb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/sentry/client/event.rb b/lib/sentry/client/event.rb new file mode 100644 index 00000000000..8bcada5a9ce --- /dev/null +++ b/lib/sentry/client/event.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module Sentry + class Client + module Event + def issue_latest_event(issue_id:) + latest_event = http_get(issue_latest_event_api_url(issue_id))[:body] + + map_to_event(latest_event) + end + + private + + def issue_latest_event_api_url(issue_id) + latest_event_url = URI(url) + latest_event_url.path = "/api/0/issues/#{issue_id}/events/latest/" + + latest_event_url + end + + def map_to_event(event) + stack_trace = parse_stack_trace(event) + + Gitlab::ErrorTracking::ErrorEvent.new( + issue_id: event.dig('groupID'), + date_received: event.dig('dateReceived'), + stack_trace_entries: stack_trace + ) + end + + def parse_stack_trace(event) + exception_entry = event.dig('entries')&.detect { |h| h['type'] == 'exception' } + return [] unless exception_entry + + exception_values = exception_entry.dig('data', 'values') + stack_trace_entry = exception_values&.detect { |h| h['stacktrace'].present? } + return [] unless stack_trace_entry + + stack_trace_entry.dig('stacktrace', 'frames') || [] + end + end + end +end |