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-01-08 00:07:50 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-08 00:07:50 +0300
commitd203316c80aa27cf747aa29df9f7c2d374965b5f (patch)
treeaab5cde76fbf19a2639f6f9f3cb4f2acdc95f803 /lib/sentry/client
parent8dafc3b65aeb8f50fdfc38fb98d96c3db9e2f607 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/sentry/client')
-rw-r--r--lib/sentry/client/event.rb43
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