diff options
| author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-11 21:08:09 +0000 |
|---|---|---|
| committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-11 21:08:09 +0000 |
| commit | fdc26e021b1e3eea4161bf6891f3a151fb7414b0 (patch) | |
| tree | f06ce58930f41f8d031e827df198fed5dfab09be /app/services/error_tracking | |
| parent | 11df4bf91b8cf9ac7bb601241992e300eebf684c (diff) | |
| download | gitlab-ce-fdc26e021b1e3eea4161bf6891f3a151fb7414b0.tar.gz | |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/error_tracking')
6 files changed, 40 insertions, 42 deletions
diff --git a/app/services/error_tracking/base_service.rb b/app/services/error_tracking/base_service.rb index 598621f70e1..d2ecd0a6d5a 100644 --- a/app/services/error_tracking/base_service.rb +++ b/app/services/error_tracking/base_service.rb @@ -71,5 +71,15 @@ module ErrorTracking def can_update? can?(current_user, :update_sentry_issue, project) end + + def error_repository + Gitlab::ErrorTracking::ErrorRepository.build(project) + end + + def handle_error_repository_exceptions + yield + rescue Gitlab::ErrorTracking::ErrorRepository::DatabaseError => e + { error: e.message } + end end end diff --git a/app/services/error_tracking/collect_error_service.rb b/app/services/error_tracking/collect_error_service.rb index 6376b743255..8cb3793ba97 100644 --- a/app/services/error_tracking/collect_error_service.rb +++ b/app/services/error_tracking/collect_error_service.rb @@ -5,30 +5,24 @@ module ErrorTracking include Gitlab::Utils::StrongMemoize def execute - # Error is a way to group events based on common data like name or cause - # of exception. We need to keep a sane balance here between taking too little - # and too much data into group logic. - error = project.error_tracking_errors.report_error( - name: exception['type'], # Example: ActionView::MissingTemplate - description: exception['value'], # Example: Missing template posts/show in... - actor: actor, # Example: PostsController#show - platform: event['platform'], # Example: ruby - timestamp: timestamp - ) - - # The payload field contains all the data on error including stacktrace in jsonb. - # Together with occurred_at these are 2 main attributes that we need to save here. - error.events.create!( - environment: event['environment'], + error_repository.report_error( + name: exception['type'], description: exception['value'], - level: event['level'], + actor: actor, + platform: event['platform'], occurred_at: timestamp, + environment: event['environment'], + level: event['level'], payload: event ) end private + def error_repository + Gitlab::ErrorTracking::ErrorRepository.build(project) + end + def event @event ||= format_event(params[:event]) end diff --git a/app/services/error_tracking/issue_details_service.rb b/app/services/error_tracking/issue_details_service.rb index 1614c597a8e..e82ad540e57 100644 --- a/app/services/error_tracking/issue_details_service.rb +++ b/app/services/error_tracking/issue_details_service.rb @@ -49,13 +49,10 @@ module ErrorTracking # Issue https://gitlab.com/gitlab-org/gitlab/-/issues/329596 # if project_error_tracking_setting.integrated_client? - error = project.error_tracking_errors.find(issue_id) - - # We use the same response format as project_error_tracking_setting - # method below for compatibility with existing code. - { - issue: error.to_sentry_detailed_error - } + handle_error_repository_exceptions do + error = error_repository.find_error(issue_id) + { issue: error } + end else project_error_tracking_setting.issue_details(issue_id: issue_id) end diff --git a/app/services/error_tracking/issue_latest_event_service.rb b/app/services/error_tracking/issue_latest_event_service.rb index 1bf86c658fc..0290c8eac86 100644 --- a/app/services/error_tracking/issue_latest_event_service.rb +++ b/app/services/error_tracking/issue_latest_event_service.rb @@ -26,14 +26,13 @@ module ErrorTracking # Issue https://gitlab.com/gitlab-org/gitlab/-/issues/329596 # if project_error_tracking_setting.integrated_client? - error = project.error_tracking_errors.find(issue_id) - event = error.events.last + handle_error_repository_exceptions do + event = error_repository.last_event_for(issue_id) - # We use the same response format as project_error_tracking_setting - # method below for compatibility with existing code. - { - latest_event: event.to_sentry_error_event - } + # We use the same response format as project_error_tracking_setting + # method below for compatibility with existing code. + { latest_event: event } + end else project_error_tracking_setting.issue_latest_event(issue_id: issue_id) end diff --git a/app/services/error_tracking/issue_update_service.rb b/app/services/error_tracking/issue_update_service.rb index 624e5f94dde..ca5e8d656a6 100644 --- a/app/services/error_tracking/issue_update_service.rb +++ b/app/services/error_tracking/issue_update_service.rb @@ -84,14 +84,12 @@ module ErrorTracking # Issue https://gitlab.com/gitlab-org/gitlab/-/issues/329596 # if project_error_tracking_setting.integrated_client? - error = project.error_tracking_errors.find(opts[:issue_id]) - error.status = opts[:params][:status] - error.save! + updated = error_repository.update_error(opts[:issue_id], status: opts[:params][:status]) # We use the same response format as project_error_tracking_setting # method below for compatibility with existing code. { - updated: true + updated: updated } else project_error_tracking_setting.update_issue(**opts) diff --git a/app/services/error_tracking/list_issues_service.rb b/app/services/error_tracking/list_issues_service.rb index 1979816b88d..ca7208dba96 100644 --- a/app/services/error_tracking/list_issues_service.rb +++ b/app/services/error_tracking/list_issues_service.rb @@ -73,24 +73,24 @@ module ErrorTracking if project_error_tracking_setting.integrated_client? # We are going to support more options in the future. # For now we implement the bare minimum for rendering the list in UI. - filter_opts = { - status: opts[:issue_status], + list_opts = { + filters: { status: opts[:issue_status] }, sort: opts[:sort], limit: opts[:limit], cursor: opts[:cursor] } - errors = ErrorTracking::ErrorsFinder.new(current_user, project, filter_opts).execute + errors, pagination = error_repository.list_errors(**list_opts) - pagination = {} - pagination[:next] = { cursor: errors.cursor_for_next_page } if errors.has_next_page? - pagination[:previous] = { cursor: errors.cursor_for_previous_page } if errors.has_previous_page? + pagination_hash = {} + pagination_hash[:next] = { cursor: pagination.next } if pagination.next + pagination_hash[:previous] = { cursor: pagination.prev } if pagination.prev # We use the same response format as project_error_tracking_setting # method below for compatibility with existing code. { - issues: errors.map(&:to_sentry_error), - pagination: pagination + issues: errors, + pagination: pagination_hash } else project_error_tracking_setting.list_sentry_issues(**opts) |
