diff --git a/src/main/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessService.java b/src/main/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessService.java index 3fbe96e4..6ec8796d 100644 --- a/src/main/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessService.java +++ b/src/main/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessService.java @@ -6,6 +6,7 @@ import de.filefighter.rest.domain.token.business.AccessTokenBusinessService; import de.filefighter.rest.domain.user.business.UserBusinessService; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import java.time.Instant; @@ -16,16 +17,19 @@ public class SystemHealthBusinessService { private final UserBusinessService userBusinessService; private final AccessTokenBusinessService accessTokenBusinessService; private final FileSystemBusinessService fileSystemBusinessService; + private final Environment environment; + private final long serverStartedAt; private DataIntegrity cachedIntegrity = DataIntegrity.STABLE; @Value("${filefighter.version}") String version; - public SystemHealthBusinessService(UserBusinessService userBusinessService, AccessTokenBusinessService accessTokenBusinessService, FileSystemBusinessService fileSystemBusinessService) { + public SystemHealthBusinessService(UserBusinessService userBusinessService, AccessTokenBusinessService accessTokenBusinessService, FileSystemBusinessService fileSystemBusinessService, Environment environment) { this.userBusinessService = userBusinessService; this.accessTokenBusinessService = accessTokenBusinessService; this.fileSystemBusinessService = fileSystemBusinessService; + this.environment = environment; this.serverStartedAt = this.getCurrentEpochSeconds(); } @@ -36,10 +40,22 @@ public SystemHealth getCurrentSystemHealthInfo() { .userCount(userBusinessService.getUserCount()) .usedStorageInMb(fileSystemBusinessService.getTotalFileSize()) .dataIntegrity(calculateDataIntegrity()) + .deployment(getDeploymentStatus()) .version("v" + this.version) .build(); } + public String getDeploymentStatus() { + String[] profiles = environment.getActiveProfiles(); + + StringBuilder deploymentStatus = new StringBuilder(); + + for (String profile : profiles) { + deploymentStatus.append(profile).append(" "); + } + return deploymentStatus.toString().strip(); + } + private DataIntegrity calculateDataIntegrity() { long userCount = userBusinessService.getUserCount(); long accessTokenCount = accessTokenBusinessService.getAccessTokenCount(); diff --git a/src/main/java/de/filefighter/rest/domain/health/data/SystemHealth.java b/src/main/java/de/filefighter/rest/domain/health/data/SystemHealth.java index 23af01a7..83507c32 100644 --- a/src/main/java/de/filefighter/rest/domain/health/data/SystemHealth.java +++ b/src/main/java/de/filefighter/rest/domain/health/data/SystemHealth.java @@ -14,6 +14,7 @@ public class SystemHealth { private final long userCount; private final double usedStorageInMb; private final DataIntegrity dataIntegrity; + private final String deployment; private final String version; public enum DataIntegrity { diff --git a/src/test/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessServiceUnitTest.java b/src/test/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessServiceUnitTest.java index 8e5d346c..7e33cc4a 100644 --- a/src/test/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessServiceUnitTest.java +++ b/src/test/java/de/filefighter/rest/domain/health/business/SystemHealthBusinessServiceUnitTest.java @@ -7,6 +7,7 @@ import de.filefighter.rest.domain.user.business.UserBusinessService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.core.env.Environment; import java.time.Instant; @@ -19,12 +20,13 @@ class SystemHealthBusinessServiceUnitTest { private final UserBusinessService userBusinessServiceMock = mock(UserBusinessService.class); private final AccessTokenBusinessService accessTokenBusinessServiceMock = mock(AccessTokenBusinessService.class); - private final FileSystemBusinessService fileSystemBusinessService = mock(FileSystemBusinessService.class); + private final FileSystemBusinessService fileSystemBusinessServiceMock = mock(FileSystemBusinessService.class); + private final Environment environmentMock = mock(Environment.class); private SystemHealthBusinessService systemHealthBusinessService; @BeforeEach void setUp() { - systemHealthBusinessService = new SystemHealthBusinessService(userBusinessServiceMock, accessTokenBusinessServiceMock, fileSystemBusinessService); + systemHealthBusinessService = new SystemHealthBusinessService(userBusinessServiceMock, accessTokenBusinessServiceMock, fileSystemBusinessServiceMock, environmentMock); } @Test @@ -33,7 +35,8 @@ void getCurrentSystemHealthInfo() { double expectedSize = 1234.532; when(userBusinessServiceMock.getUserCount()).thenReturn(expectedUserCount); - when(fileSystemBusinessService.getTotalFileSize()).thenReturn(expectedSize); + when(fileSystemBusinessServiceMock.getTotalFileSize()).thenReturn(expectedSize); + when(environmentMock.getActiveProfiles()).thenReturn(new String[]{"test"}); SystemHealth systemHealth = systemHealthBusinessService.getCurrentSystemHealthInfo(); @@ -50,9 +53,10 @@ void getCurrentEpochSecondsReturnsEpochSeconds() { } @Test - void calculateDataIntegrityReturnsStable(){ + void calculateDataIntegrityReturnsStable() { when(userBusinessServiceMock.getUserCount()).thenReturn(2L); when(accessTokenBusinessServiceMock.getAccessTokenCount()).thenReturn(2L); + when(environmentMock.getActiveProfiles()).thenReturn(new String[]{"test"}); DataIntegrity dataIntegrity = DataIntegrity.STABLE; DataIntegrity actual = systemHealthBusinessService.getCurrentSystemHealthInfo().getDataIntegrity(); @@ -67,12 +71,24 @@ void calculateDataIntegrityReturnsStable(){ } @Test - void calculateDataIntegrityReturnsRisk(){ + void calculateDataIntegrityReturnsRisk() { when(userBusinessServiceMock.getUserCount()).thenReturn(2L); when(accessTokenBusinessServiceMock.getAccessTokenCount()).thenReturn(3L); + when(environmentMock.getActiveProfiles()).thenReturn(new String[]{"test"}); DataIntegrity dataIntegrity = DataIntegrity.POSSIBLE_RISK; DataIntegrity actual = systemHealthBusinessService.getCurrentSystemHealthInfo().getDataIntegrity(); assertEquals(dataIntegrity, actual); } + + @Test + void getDeploymentStatusWorks() { + String string0 = "dev"; + String string1 = "non-prod"; + String string2 = "stage"; + + when(environmentMock.getActiveProfiles()).thenReturn(new String[]{string0, string1, string2}); + + assertEquals(string0 + " " + string1 + " " + string2, systemHealthBusinessService.getDeploymentStatus()); + } } \ No newline at end of file