diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /app/services/projects/alerting/notify_service.rb | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) | |
download | gitlab-ce-8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781.tar.gz |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'app/services/projects/alerting/notify_service.rb')
-rw-r--r-- | app/services/projects/alerting/notify_service.rb | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/app/services/projects/alerting/notify_service.rb b/app/services/projects/alerting/notify_service.rb index 76c89e85f17..86c408aeec8 100644 --- a/app/services/projects/alerting/notify_service.rb +++ b/app/services/projects/alerting/notify_service.rb @@ -10,7 +10,7 @@ module Projects return forbidden unless alerts_service_activated? return unauthorized unless valid_token?(token) - alert = create_alert + alert = process_alert return bad_request unless alert.persisted? process_incident_issues(alert) if process_issues? @@ -26,11 +26,36 @@ module Projects delegate :alerts_service, :alerts_service_activated?, to: :project def am_alert_params - Gitlab::AlertManagement::AlertParams.from_generic_alert(project: project, payload: params.to_h) + strong_memoize(:am_alert_params) do + Gitlab::AlertManagement::AlertParams.from_generic_alert(project: project, payload: params.to_h) + end + end + + def process_alert + existing_alert = find_alert_by_fingerprint(am_alert_params[:fingerprint]) + + if existing_alert + process_existing_alert(existing_alert) + else + create_alert + end + end + + def process_existing_alert(alert) + alert.register_new_event! end def create_alert - AlertManagement::Alert.create(am_alert_params) + alert = AlertManagement::Alert.create(am_alert_params) + alert.execute_services if alert.persisted? + + alert + end + + def find_alert_by_fingerprint(fingerprint) + return unless fingerprint + + AlertManagement::Alert.for_fingerprint(project, fingerprint).first end def send_email? @@ -38,6 +63,8 @@ module Projects end def process_incident_issues(alert) + return if alert.issue + IncidentManagement::ProcessAlertWorker .perform_async(project.id, parsed_payload, alert.id) end |