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:
Diffstat (limited to 'lib/error_tracking/sentry_client/event.rb')
-rw-r--r--lib/error_tracking/sentry_client/event.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/error_tracking/sentry_client/event.rb b/lib/error_tracking/sentry_client/event.rb
new file mode 100644
index 00000000000..93449344d6c
--- /dev/null
+++ b/lib/error_tracking/sentry_client/event.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module ErrorTracking
+ class SentryClient
+ module Event
+ def issue_latest_event(issue_id:)
+ latest_event = http_get(api_urls.issue_latest_event_url(issue_id))[:body]
+
+ map_to_event(latest_event)
+ end
+
+ private
+
+ 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