diff --git a/gradle/changelog/notify_current_user.yaml b/gradle/changelog/notify_current_user.yaml new file mode 100644 index 0000000000..0cba4841bc --- /dev/null +++ b/gradle/changelog/notify_current_user.yaml @@ -0,0 +1,2 @@ +- type: changed + description: Notify user about results of manually executed health check ([#2044](https://github.com/scm-manager/scm-manager/pull/2044)) diff --git a/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java b/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java index b3ea7a7552..28fa931561 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java @@ -227,22 +227,28 @@ final class HealthChecker { } private void notifyCurrentUser(Repository repository, HealthCheckResult result) { - if (!(repository.isHealthy() && result.isHealthy())) { - String currentUser = SecurityUtils.getSubject().getPrincipal().toString(); - if (!scmConfiguration.getEmergencyContacts().contains(currentUser)) { - notificationSender.send(getHealthCheckFailedNotification(repository)); - } + if (repository.isHealthy() && result.isHealthy()) { + notificationSender.send(getHealthCheckSuccessNotification(repository)); + } else { + notificationSender.send(getHealthCheckFailedNotification(repository)); } } private void notifyEmergencyContacts(Repository repository) { + String currentUser = SecurityUtils.getSubject().getPrincipal().toString(); Set emergencyContacts = scmConfiguration.getEmergencyContacts(); for (String user : emergencyContacts) { - notificationSender.send(getHealthCheckFailedNotification(repository), user); + if (!user.equals(currentUser)) { + notificationSender.send(getHealthCheckFailedNotification(repository), user); + } } } private Notification getHealthCheckFailedNotification(Repository repository) { return new Notification(Type.ERROR, "/repo/" + repository.getNamespaceAndName() + "/settings/general", "healthCheckFailed"); } + + private Notification getHealthCheckSuccessNotification(Repository repository) { + return new Notification(Type.SUCCESS, "/repo/" + repository.getNamespaceAndName() + "/settings/general", "healthCheckSuccess"); + } } diff --git a/scm-webapp/src/main/resources/locales/de/plugins.json b/scm-webapp/src/main/resources/locales/de/plugins.json index 4a2b774123..1e78dd2855 100644 --- a/scm-webapp/src/main/resources/locales/de/plugins.json +++ b/scm-webapp/src/main/resources/locales/de/plugins.json @@ -480,7 +480,8 @@ "notifications": { "exportFinished": "Der Repository Export wurde abgeschlossen.", "exportFailed": "Der Repository Export ist fehlgeschlagen. Versuchen Sie es erneut oder wenden Sie sich an einen Administrator.", - "healthCheckFailed": "Der Repository Health Check ist fehlgeschlagen." + "healthCheckFailed": "Der Repository Health Check ist fehlgeschlagen.", + "healthCheckSuccess": "Der Repository Health Check war erfolgreich." }, "search": { "types": { diff --git a/scm-webapp/src/main/resources/locales/en/plugins.json b/scm-webapp/src/main/resources/locales/en/plugins.json index 127480c183..28a962d99e 100644 --- a/scm-webapp/src/main/resources/locales/en/plugins.json +++ b/scm-webapp/src/main/resources/locales/en/plugins.json @@ -424,7 +424,8 @@ "notifications": { "exportFinished": "The repository export has been finished.", "exportFailed": "The repository export has failed. Try it again or contact your administrator.", - "healthCheckFailed": "The repository health check has failed." + "healthCheckFailed": "The repository health check has failed.", + "healthCheckSuccess": "The repository health check was successful." }, "search": { "types": { diff --git a/scm-webapp/src/test/java/sonia/scm/repository/HealthCheckerTest.java b/scm-webapp/src/test/java/sonia/scm/repository/HealthCheckerTest.java index 69bf829477..bfdbacb2bd 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/HealthCheckerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/HealthCheckerTest.java @@ -119,6 +119,7 @@ class HealthCheckerTest { @Test void shouldComputeLightChecks() { + when(subject.getPrincipal()).thenReturn("trillian"); when(healthCheck1.check(repository)).thenReturn(HealthCheckResult.unhealthy(createFailure("error1"))); when(healthCheck2.check(repository)).thenReturn(HealthCheckResult.unhealthy(createFailure("error2"))); @@ -261,8 +262,8 @@ class HealthCheckerTest { checker.fullCheck(repositoryId); - verify(notificationSender, never()).send(any()); - verify(notificationSender,times(1)).send(any(), eq("trillian")); + verify(notificationSender, times(1)).send(any()); + verify(notificationSender, never()).send(any(), eq("trillian")); } @Test @@ -274,7 +275,7 @@ class HealthCheckerTest { checker.fullCheck(repositoryId); - verify(notificationSender).send(any(), eq("trillian")); + verify(notificationSender).send(any()); verify(notificationSender).send(any(), eq("Arthur")); } }