From 0a6ffb540e569bd7a7c548d59b12bc55d4bf9cf1 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 21 Nov 2019 12:06:40 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- lib/sentry/client.rb | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) (limited to 'lib/sentry') diff --git a/lib/sentry/client.rb b/lib/sentry/client.rb index e4428f6fff2..3aa3eb45d85 100644 --- a/lib/sentry/client.rb +++ b/lib/sentry/client.rb @@ -5,6 +5,14 @@ module Sentry Error = Class.new(StandardError) MissingKeysError = Class.new(StandardError) ResponseInvalidSizeError = Class.new(StandardError) + BadRequestError = Class.new(StandardError) + + SENTRY_API_SORT_VALUE_MAP = { + # => + 'frequency' => 'freq', + 'first_seen' => 'new', + 'last_seen' => nil + }.freeze attr_accessor :url, :token @@ -25,12 +33,8 @@ module Sentry map_to_event(latest_event) end - def list_issues(issue_status:, limit:, search_term: '') - issues = get_issues( - issue_status: issue_status, - limit: limit, - search_term: search_term - ) + def list_issues(**keyword_args) + issues = get_issues(keyword_args) validate_size(issues) @@ -52,14 +56,14 @@ module Sentry def validate_size(issues) return if Gitlab::Utils::DeepSize.new(issues).valid? - raise Client::ResponseInvalidSizeError, "Sentry API response is too big. Limit is #{Gitlab::Utils::DeepSize.human_default_max_size}." + raise ResponseInvalidSizeError, "Sentry API response is too big. Limit is #{Gitlab::Utils::DeepSize.human_default_max_size}." end def handle_mapping_exceptions(&block) yield rescue KeyError => e Gitlab::Sentry.track_acceptable_exception(e) - raise Client::MissingKeysError, "Sentry API response is missing keys. #{e.message}" + raise MissingKeysError, "Sentry API response is missing keys. #{e.message}" end def request_params @@ -78,13 +82,25 @@ module Sentry handle_response(response) end - def get_issues(issue_status:, limit:, search_term: '') - query = "is:#{issue_status} #{search_term}".strip + def get_issues(**keyword_args) + http_get( + issues_api_url, + query: list_issue_sentry_query(keyword_args) + ) + end + + def list_issue_sentry_query(issue_status:, limit:, sort: nil, search_term: '') + unless SENTRY_API_SORT_VALUE_MAP.key?(sort) + raise BadRequestError, 'Invalid value for sort param' + end + + query_params = { + query: "is:#{issue_status} #{search_term}".strip, + limit: limit, + sort: SENTRY_API_SORT_VALUE_MAP[sort] + } - http_get(issues_api_url, query: { - query: query, - limit: limit - }) + query_params.compact end def get_issue(issue_id:) -- cgit v1.2.3