diff options
Diffstat (limited to 'lib/error_tracking/sentry_client/event.rb')
-rw-r--r-- | lib/error_tracking/sentry_client/event.rb | 36 |
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 |