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
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-10 00:07:48 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-10 00:07:48 +0300
commite98d69bc8b8b926a727d36e37d2ee30c9fa28907 (patch)
tree1e86398c19b6ddd0602a99fb449cf75652ac62cf /app
parent007aba8b3b5583c5ef31670369f32f9f1f72555d (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/error_tracking_controller.rb17
-rw-r--r--app/helpers/projects/error_tracking_helper.rb1
-rw-r--r--app/models/concerns/awardable.rb4
-rw-r--r--app/models/error_tracking/project_error_tracking_setting.rb56
-rw-r--r--app/services/error_tracking/issue_update_service.rb22
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