summaryrefslogtreecommitdiff
path: root/app/services/incident_management/create_issue_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/incident_management/create_issue_service.rb')
-rw-r--r--app/services/incident_management/create_issue_service.rb55
1 files changed, 11 insertions, 44 deletions
diff --git a/app/services/incident_management/create_issue_service.rb b/app/services/incident_management/create_issue_service.rb
index 4b59dc64cec..5e1e0863115 100644
--- a/app/services/incident_management/create_issue_service.rb
+++ b/app/services/incident_management/create_issue_service.rb
@@ -4,21 +4,12 @@ module IncidentManagement
class CreateIssueService < BaseService
include Gitlab::Utils::StrongMemoize
- INCIDENT_LABEL = {
- title: 'incident',
- color: '#CC0033',
- description: <<~DESCRIPTION.chomp
- Denotes a disruption to IT services and \
- the associated issues require immediate attention
- DESCRIPTION
- }.freeze
-
- def initialize(project, params, user = User.alert_bot)
- super(project, user, params)
+ def initialize(project, params)
+ super(project, User.alert_bot, params)
end
- def execute(skip_settings_check: false)
- return error_with('setting disabled') unless skip_settings_check || incident_management_setting.create_issue?
+ def execute
+ return error_with('setting disabled') unless incident_management_setting.create_issue?
return error_with('invalid alert') unless alert.valid?
issue = create_issue
@@ -30,26 +21,19 @@ module IncidentManagement
private
def create_issue
- issue = do_create_issue(label_ids: issue_label_ids)
+ label_result = find_or_create_incident_label
- # Create an unlabelled issue if we couldn't create the issue
- # due to labels errors.
+ # Create an unlabelled issue if we couldn't create the label
+ # due to a race condition.
# See https://gitlab.com/gitlab-org/gitlab-foss/issues/65042
- if issue.errors.include?(:labels)
- log_label_error(issue)
- issue = do_create_issue
- end
-
- issue
- end
+ extra_params = label_result.success? ? { label_ids: [label_result.payload[:label].id] } : {}
- def do_create_issue(**params)
Issues::CreateService.new(
project,
current_user,
title: issue_title,
description: issue_description,
- **params
+ **extra_params
).execute
end
@@ -67,16 +51,8 @@ module IncidentManagement
].compact.join(horizontal_line)
end
- def issue_label_ids
- [
- find_or_create_label(**INCIDENT_LABEL)
- ].compact.map(&:id)
- end
-
- def find_or_create_label(**params)
- Labels::FindOrCreateService
- .new(current_user, project, **params)
- .execute
+ def find_or_create_incident_label
+ IncidentManagement::CreateIncidentLabelService.new(project, current_user).execute
end
def alert_summary
@@ -108,15 +84,6 @@ module IncidentManagement
issue.errors.full_messages.to_sentence
end
- def log_label_error(issue)
- log_info <<~TEXT.chomp
- Cannot create incident issue with labels \
- #{issue.labels.map(&:title).inspect} \
- for "#{project.full_name}": #{issue.errors.full_messages.to_sentence}.
- Retrying without labels.
- TEXT
- end
-
def error_with(message)
log_error(%{Cannot create incident issue for "#{project.full_name}": #{message}})