diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-10 00:07:48 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-10 00:07:48 +0300 |
commit | e98d69bc8b8b926a727d36e37d2ee30c9fa28907 (patch) | |
tree | 1e86398c19b6ddd0602a99fb449cf75652ac62cf /app | |
parent | 007aba8b3b5583c5ef31670369f32f9f1f72555d (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/error_tracking_controller.rb | 17 | ||||
-rw-r--r-- | app/helpers/projects/error_tracking_helper.rb | 1 | ||||
-rw-r--r-- | app/models/concerns/awardable.rb | 4 | ||||
-rw-r--r-- | app/models/error_tracking/project_error_tracking_setting.rb | 56 | ||||
-rw-r--r-- | app/services/error_tracking/issue_update_service.rb | 22 |
5 files changed, 77 insertions, 23 deletions
diff --git a/app/controllers/projects/error_tracking_controller.rb b/app/controllers/projects/error_tracking_controller.rb index dea8cd81f4f..88f739ce29e 100644 --- a/app/controllers/projects/error_tracking_controller.rb +++ b/app/controllers/projects/error_tracking_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Projects::ErrorTrackingController < Projects::ErrorTracking::BaseController + respond_to :json + before_action :authorize_read_sentry_issue! before_action :set_issue_id, only: :details @@ -24,6 +26,17 @@ class Projects::ErrorTrackingController < Projects::ErrorTracking::BaseControlle end end + def update + service = ErrorTracking::IssueUpdateService.new(project, current_user, issue_update_params) + result = service.execute + + return if handle_errors(result) + + render json: { + result: result + } + end + private def render_index_json @@ -65,6 +78,10 @@ class Projects::ErrorTrackingController < Projects::ErrorTracking::BaseControlle params.permit(:search_term, :sort, :cursor) end + def issue_update_params + params.permit(:issue_id, :status) + end + def issue_details_params params.permit(:issue_id) end diff --git a/app/helpers/projects/error_tracking_helper.rb b/app/helpers/projects/error_tracking_helper.rb index de21a78f5f0..2ec7fa91c86 100644 --- a/app/helpers/projects/error_tracking_helper.rb +++ b/app/helpers/projects/error_tracking_helper.rb @@ -20,6 +20,7 @@ module Projects::ErrorTrackingHelper { 'project-issues-path' => project_issues_path(project), 'issue-details-path' => details_project_error_tracking_index_path(*opts), + 'issue-update-path' => update_project_error_tracking_index_path(*opts), 'issue-stack-trace-path' => stack_trace_project_error_tracking_index_path(*opts) } end diff --git a/app/models/concerns/awardable.rb b/app/models/concerns/awardable.rb index f229b42ade6..0f2a389f0a3 100644 --- a/app/models/concerns/awardable.rb +++ b/app/models/concerns/awardable.rb @@ -67,7 +67,9 @@ module Awardable ) ).join_sources - joins(join_clause).group(awardable_table[:id]).reorder("COUNT(award_emoji.id) #{direction}") + joins(join_clause).group(awardable_table[:id]).reorder( + Arel.sql("COUNT(award_emoji.id) #{direction}") + ) end end diff --git a/app/models/error_tracking/project_error_tracking_setting.rb b/app/models/error_tracking/project_error_tracking_setting.rb index bbafcaed46e..4aba70cb124 100644 --- a/app/models/error_tracking/project_error_tracking_setting.rb +++ b/app/models/error_tracking/project_error_tracking_setting.rb @@ -101,30 +101,27 @@ module ErrorTracking end end + def update_issue(opts = {} ) + handle_exceptions do + { updated: sentry_client.update_issue(opts) } + end + end + def calculate_reactive_cache(request, opts) - case request - when 'list_issues' - sentry_client.list_issues(**opts.symbolize_keys) - when 'issue_details' - { - issue: sentry_client.issue_details(**opts.symbolize_keys) - } - when 'issue_latest_event' - { - latest_event: sentry_client.issue_latest_event(**opts.symbolize_keys) - } + handle_exceptions do + case request + when 'list_issues' + sentry_client.list_issues(**opts.symbolize_keys) + when 'issue_details' + { + issue: sentry_client.issue_details(**opts.symbolize_keys) + } + when 'issue_latest_event' + { + latest_event: sentry_client.issue_latest_event(**opts.symbolize_keys) + } + end end - rescue Sentry::Client::Error => e - { error: e.message, error_type: SENTRY_API_ERROR_TYPE_NON_20X_RESPONSE } - rescue Sentry::Client::MissingKeysError => e - { error: e.message, error_type: SENTRY_API_ERROR_TYPE_MISSING_KEYS } - rescue Sentry::Client::ResponseInvalidSizeError => e - { error: e.message, error_type: SENTRY_API_ERROR_INVALID_SIZE } - rescue Sentry::Client::BadRequestError => e - { error: e.message, error_type: SENTRY_API_ERROR_TYPE_BAD_REQUEST } - rescue StandardError => e - Gitlab::ErrorTracking.track_exception(e) - { error: 'Unexpected Error' } end # http://HOST/api/0/projects/ORG/PROJECT @@ -143,6 +140,21 @@ module ErrorTracking private + def handle_exceptions + yield + rescue Sentry::Client::Error => e + { error: e.message, error_type: SENTRY_API_ERROR_TYPE_NON_20X_RESPONSE } + rescue Sentry::Client::MissingKeysError => e + { error: e.message, error_type: SENTRY_API_ERROR_TYPE_MISSING_KEYS } + rescue Sentry::Client::ResponseInvalidSizeError => e + { error: e.message, error_type: SENTRY_API_ERROR_INVALID_SIZE } + rescue Sentry::Client::BadRequestError => e + { error: e.message, error_type: SENTRY_API_ERROR_TYPE_BAD_REQUEST } + rescue StandardError => e + Gitlab::ErrorTracking.track_exception(e) + { error: 'Unexpected Error' } + end + def project_name_from_slug @project_name_from_slug ||= project_slug_from_api_url&.titleize end diff --git a/app/services/error_tracking/issue_update_service.rb b/app/services/error_tracking/issue_update_service.rb new file mode 100644 index 00000000000..e433b4a11f2 --- /dev/null +++ b/app/services/error_tracking/issue_update_service.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module ErrorTracking + class IssueUpdateService < ErrorTracking::BaseService + private + + def fetch + project_error_tracking_setting.update_issue( + issue_id: params[:issue_id], + params: update_params + ) + end + + def update_params + params.except(:issue_id) + end + + def parse_response(response) + { updated: response[:updated].present? } + end + end +end |