diff --git a/backend/build.gradle b/backend/build.gradle index fd9fb446..3df9308e 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -39,9 +39,6 @@ dependencies { // Test testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - - // Management - } tasks.named('test') { diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/agent/model/Agent.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/agent/model/Agent.java index 6d6c8c14..1ea1f1b6 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/agent/model/Agent.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/agent/model/Agent.java @@ -1,32 +1,31 @@ /* (C) 2024 */ package rocks.inspectit.gepard.agentmanager.agent.model; -import jakarta.annotation.Nonnull; +import jakarta.validation.constraints.NotNull; import java.time.Instant; import lombok.*; /** Represents an agent which is connected to the config server. */ -@RequiredArgsConstructor -@NoArgsConstructor +@AllArgsConstructor @Builder @ToString @Getter public class Agent { /** The name of the service which is running the agent. */ - @Nonnull private String serviceName; + @NotNull private String serviceName; /** The process id of the JVM which carries the agent. */ - @Nonnull private Long pid; + @NotNull private Long pid; /** The Gepard-Version. */ - @Nonnull private String gepardVersion; + @NotNull private String gepardVersion; /** The OpenTelemetry-Java-Instrumentation-Version. */ - @Nonnull private String otelVersion; + @NotNull private String otelVersion; /** The start time of the JVM which carries the agent. */ - @Nonnull private Instant startTime; + @NotNull private Instant startTime; /** The Java version of the JVM which carries the agent. */ - @Nonnull private String javaVersion; + @NotNull private String javaVersion; } diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/application/config/CorsConfiguration.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/application/config/CorsConfiguration.java index b93065c8..7f8d2355 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/application/config/CorsConfiguration.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/application/config/CorsConfiguration.java @@ -10,13 +10,13 @@ @Configuration public class CorsConfiguration implements WebMvcConfigurer { - @Value("${inspectit.gepard.security.cors.path-pattern}") + @Value("${inspectit-config-server.security.cors.path-pattern}") private String pathPattern; - @Value("${inspectit.gepard.security.cors.allowed-origins}") + @Value("${inspectit-config-server.security.cors.allowed-origins}") private String allowedOrigins; - @Value("${inspectit.gepard.security.cors.allowed-methods}") + @Value("${inspectit-config-server.security.cors.allowed-methods}") private String allowedMethods; /** diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/InstrumentationConfiguration.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/InstrumentationConfiguration.java index a2a07e4e..93962f88 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/InstrumentationConfiguration.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/InstrumentationConfiguration.java @@ -2,6 +2,7 @@ package rocks.inspectit.gepard.agentmanager.configuration.model.instrumentation; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; @@ -16,5 +17,5 @@ @Getter public class InstrumentationConfiguration { - @Valid private List scopes = List.of(); + @Valid private List<@NotNull Scope> scopes = List.of(); } diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/Scope.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/Scope.java index 2bbce88c..ce1a6c9c 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/Scope.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/model/instrumentation/Scope.java @@ -18,7 +18,7 @@ public class Scope { @NotNull(message = "Fqn is missing.") private String fqn; - private List methods = List.of(); + private List<@NotNull String> methods = List.of(); private boolean enabled = false; } diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/service/ConfigurationService.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/service/ConfigurationService.java index 3ff00ab9..80436a54 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/service/ConfigurationService.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/configuration/service/ConfigurationService.java @@ -7,7 +7,7 @@ @Service public class ConfigurationService { - private InspectitConfiguration inspectitConfiguration; + private volatile InspectitConfiguration inspectitConfiguration; public InspectitConfiguration getConfiguration() { return inspectitConfiguration; diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/ConnectionDto.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/ConnectionDto.java index cb9da089..39b25684 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/ConnectionDto.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/ConnectionDto.java @@ -1,6 +1,7 @@ /* (C) 2024 */ package rocks.inspectit.gepard.agentmanager.connection.model.dto; +import jakarta.validation.constraints.NotNull; import java.time.LocalDateTime; import java.util.UUID; import lombok.Builder; @@ -9,14 +10,14 @@ /** Represents a connection response. */ @Builder public record ConnectionDto( - UUID id, - LocalDateTime registrationTime, - String serviceName, - String gepardVersion, - String otelVersion, - Long pid, - Long startTime, - String javaVersion) { + @NotNull(message = "ID missing.") UUID id, + @NotNull(message = "Registration Time missing.") LocalDateTime registrationTime, + @NotNull(message = "Service Name missing.") String serviceName, + @NotNull(message = "Gepard Version missing.") String gepardVersion, + @NotNull(message = "Open-Telemetry Version missing.") String otelVersion, + @NotNull(message = "Process ID is missing.") Long pid, + @NotNull(message = "Start-Time missing.") Long startTime, + @NotNull(message = "Java Version missing.") String javaVersion) { public static ConnectionDto fromConnection(Connection connection) { return ConnectionDto.builder() diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/CreateConnectionRequest.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/CreateConnectionRequest.java index 5a0de980..5ee08dc6 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/CreateConnectionRequest.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/model/dto/CreateConnectionRequest.java @@ -5,12 +5,10 @@ import java.time.Instant; import java.time.LocalDateTime; import java.util.UUID; -import lombok.Builder; import rocks.inspectit.gepard.agentmanager.agent.model.Agent; import rocks.inspectit.gepard.agentmanager.connection.model.Connection; /** Represents a connection request from an agent. */ -@Builder public record CreateConnectionRequest( @NotNull(message = "Service Name missing.") String serviceName, @NotNull(message = "Gepard Version missing.") String gepardVersion, diff --git a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionService.java b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionService.java index 15b1e2a3..697cf741 100644 --- a/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionService.java +++ b/backend/src/main/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionService.java @@ -1,10 +1,10 @@ /* (C) 2024 */ package rocks.inspectit.gepard.agentmanager.connection.service; -import java.util.HashMap; import java.util.List; import java.util.NoSuchElementException; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -18,7 +18,7 @@ @RequiredArgsConstructor public class ConnectionService { - private final HashMap connectionCache = new HashMap<>(); + private final ConcurrentHashMap connectionCache = new ConcurrentHashMap<>(); /** * Handles a connection request from an agent. diff --git a/backend/src/main/resources/application.yaml b/backend/src/main/resources/application.yaml index 83326411..732f5d4c 100644 --- a/backend/src/main/resources/application.yaml +++ b/backend/src/main/resources/application.yaml @@ -30,10 +30,9 @@ springdoc: show-actuator: true use-management-port: true -inspectit: - gepard: - security: - cors: - path-pattern: "/**" - allowed-origins: "*" - allowed-methods: "*" \ No newline at end of file +inspectit-config-server: + security: + cors: + path-pattern: "/**" + allowed-origins: "*" + allowed-methods: "*" \ No newline at end of file diff --git a/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/controller/ConnectionControllerTest.java b/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/controller/ConnectionControllerTest.java index b23c515f..a26a8da4 100644 --- a/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/controller/ConnectionControllerTest.java +++ b/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/controller/ConnectionControllerTest.java @@ -7,6 +7,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import com.fasterxml.jackson.databind.ObjectMapper; +import java.time.Instant; import java.time.LocalDateTime; import java.util.UUID; import org.junit.jupiter.api.Test; @@ -31,33 +32,29 @@ class ConnectionControllerTest { @Test void connect_whenFieldIsMissing_shouldReturnBadRequest() throws Exception { - CreateConnectionRequest createConnectionRequest = - CreateConnectionRequest.builder() - .serviceName("customer-service-e") - .pid(67887L) - .gepardVersion("0.0.1") - .otelVersion("1.26.8") - .build(); + String requestBody = + """ + { + "serviceName": "customer-service-e", + "gepardVersion: "0.0.1", + "otelVersion": "1.26.8" + + } + """; mockMvc .perform( post("/api/v1/connections") .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(createConnectionRequest))) + .content(requestBody)) .andExpect(status().isBadRequest()); } @Test void connect_whenEverythingIsValid_shouldReturnOk() throws Exception { CreateConnectionRequest createConnectionRequest = - CreateConnectionRequest.builder() - .serviceName("customer-service-e") - .pid(67887L) - .gepardVersion("0.0.1") - .otelVersion("1.26.8") - .startTime(213423L) - .javaVersion("11.0.12") - .build(); + new CreateConnectionRequest( + "customer-service-e", "0.0.1", "1.26.8", 67887L, Instant.now().toEpochMilli(), "22"); Connection connection = CreateConnectionRequest.toConnection(createConnectionRequest); when(connectionService.handleConnectRequest(createConnectionRequest)).thenReturn(connection); diff --git a/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionServiceTest.java b/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionServiceTest.java index 307ecd1a..8a029171 100644 --- a/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionServiceTest.java +++ b/backend/src/test/java/rocks/inspectit/gepard/agentmanager/connection/service/ConnectionServiceTest.java @@ -23,14 +23,8 @@ class ConnectionServiceTest { @Test void testHandleConnectRequest() { CreateConnectionRequest createConnectionRequest = - CreateConnectionRequest.builder() - .startTime(Instant.now().toEpochMilli()) - .javaVersion("22") - .otelVersion("3") - .gepardVersion("4") - .pid(4435L) - .serviceName("ServiceName") - .build(); + new CreateConnectionRequest( + "customer-service-e", "0.0.1", "1.26.8", 67887L, Instant.now().toEpochMilli(), "22"); Connection response = connectionService.handleConnectRequest(createConnectionRequest); @@ -47,14 +41,8 @@ void testHandleConnectRequest() { @Test void testGetConnections() { CreateConnectionRequest createConnectionRequest = - CreateConnectionRequest.builder() - .startTime(Instant.now().toEpochMilli()) - .javaVersion("22") - .otelVersion("3") - .gepardVersion("4") - .pid(4435L) - .serviceName("ServiceName") - .build(); + new CreateConnectionRequest( + "customer-service-e", "0.0.1", "1.26.8", 67887L, Instant.now().toEpochMilli(), "22"); connectionService.handleConnectRequest(createConnectionRequest); connectionService.handleConnectRequest(createConnectionRequest); @@ -72,14 +60,8 @@ void testGetConnectionsEmptyResult() { @Test void testGetConnection() { CreateConnectionRequest createConnectionRequest = - CreateConnectionRequest.builder() - .startTime(Instant.now().toEpochMilli()) - .javaVersion("22") - .otelVersion("3") - .gepardVersion("4") - .pid(4435L) - .serviceName("ServiceName") - .build(); + new CreateConnectionRequest( + "customer-service-e", "0.0.1", "1.26.8", 67887L, Instant.now().toEpochMilli(), "22"); Connection connection = connectionService.handleConnectRequest(createConnectionRequest); ConnectionDto connectionDto = connectionService.getConnection(connection.getId());