From afe057a8ff8546f0032e439a9a200307fb6de86a Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 21 Jan 2020 09:08:43 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- app/services/error_tracking/base_service.rb | 8 ++- .../error_tracking/issue_details_service.rb | 2 +- .../error_tracking/issue_latest_event_service.rb | 2 +- .../error_tracking/issue_update_service.rb | 58 +++++++++++++++++++++- app/services/error_tracking/list_issues_service.rb | 2 +- .../error_tracking/list_projects_service.rb | 2 +- 6 files changed, 67 insertions(+), 7 deletions(-) (limited to 'app/services/error_tracking') diff --git a/app/services/error_tracking/base_service.rb b/app/services/error_tracking/base_service.rb index 430d9952332..4fe01716704 100644 --- a/app/services/error_tracking/base_service.rb +++ b/app/services/error_tracking/base_service.rb @@ -7,7 +7,7 @@ module ErrorTracking return unauthorized if unauthorized begin - response = fetch + response = perform rescue Sentry::Client::Error => e return error(e.message, :bad_request) rescue Sentry::Client::MissingKeysError => e @@ -22,7 +22,7 @@ module ErrorTracking private - def fetch + def perform raise NotImplementedError, "#{self.class} does not implement #{__method__}" end @@ -62,5 +62,9 @@ module ErrorTracking def can_read? can?(current_user, :read_sentry_issue, project) end + + def can_update? + can?(current_user, :update_sentry_issue, project) + end end end diff --git a/app/services/error_tracking/issue_details_service.rb b/app/services/error_tracking/issue_details_service.rb index 368cd4517fc..31fb6a9618c 100644 --- a/app/services/error_tracking/issue_details_service.rb +++ b/app/services/error_tracking/issue_details_service.rb @@ -4,7 +4,7 @@ module ErrorTracking class IssueDetailsService < ErrorTracking::BaseService private - def fetch + def perform project_error_tracking_setting.issue_details(issue_id: params[: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 b6ad8f8028b..dd6b7f8285f 100644 --- a/app/services/error_tracking/issue_latest_event_service.rb +++ b/app/services/error_tracking/issue_latest_event_service.rb @@ -4,7 +4,7 @@ module ErrorTracking class IssueLatestEventService < ErrorTracking::BaseService private - def fetch + def perform project_error_tracking_setting.issue_latest_event(issue_id: params[:issue_id]) end diff --git a/app/services/error_tracking/issue_update_service.rb b/app/services/error_tracking/issue_update_service.rb index e433b4a11f2..db754d54fef 100644 --- a/app/services/error_tracking/issue_update_service.rb +++ b/app/services/error_tracking/issue_update_service.rb @@ -4,6 +4,16 @@ module ErrorTracking class IssueUpdateService < ErrorTracking::BaseService private + def perform + response = fetch + + unless parse_errors(response).present? + response[:closed_issue_iid] = update_related_issue&.iid + end + + response + end + def fetch project_error_tracking_setting.update_issue( issue_id: params[:issue_id], @@ -11,12 +21,58 @@ module ErrorTracking ) end + def update_related_issue + issue = related_issue + return unless issue + + close_and_create_note(issue) + end + + def close_and_create_note(issue) + return unless resolving? && issue.opened? + + processed_issue = close_issue(issue) + return unless processed_issue.reset.closed? + + create_system_note(processed_issue) + processed_issue + end + + def close_issue(issue) + Issues::CloseService + .new(project, current_user) + .execute(issue, system_note: false) + end + + def create_system_note(issue) + SystemNoteService.close_after_error_tracking_resolve(issue, project, current_user) + end + + def related_issue + SentryIssueFinder + .new(project, current_user: current_user) + .execute(params[:issue_id]) + &.issue + end + + def resolving? + update_params[:status] == 'resolved' + end + def update_params params.except(:issue_id) end def parse_response(response) - { updated: response[:updated].present? } + { + updated: response[:updated].present?, + closed_issue_iid: response[:closed_issue_iid] + } + end + + def check_permissions + return error('Error Tracking is not enabled') unless enabled? + return error('Access denied', :unauthorized) unless can_update? end end end diff --git a/app/services/error_tracking/list_issues_service.rb b/app/services/error_tracking/list_issues_service.rb index 132e9dfa7bd..d34ea8aa3b0 100644 --- a/app/services/error_tracking/list_issues_service.rb +++ b/app/services/error_tracking/list_issues_service.rb @@ -12,7 +12,7 @@ module ErrorTracking private - def fetch + def perform project_error_tracking_setting.list_sentry_issues( issue_status: issue_status, limit: limit, diff --git a/app/services/error_tracking/list_projects_service.rb b/app/services/error_tracking/list_projects_service.rb index 09a0b952e84..6523a66bbed 100644 --- a/app/services/error_tracking/list_projects_service.rb +++ b/app/services/error_tracking/list_projects_service.rb @@ -12,7 +12,7 @@ module ErrorTracking private - def fetch + def perform project_error_tracking_setting.list_sentry_projects end -- cgit v1.2.3