Skip to content
This repository was archived by the owner on Apr 5, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
}

Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
Expand All @@ -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();

Expand All @@ -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();
Expand All @@ -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());
}
}