Compare commits
10 Commits
211350f8a4
...
7e53d48d41
Author | SHA1 | Date | |
---|---|---|---|
7e53d48d41
|
|||
7c4c9001d0
|
|||
f170687cb8
|
|||
4f3b03cec5 | |||
|
edfacb05a1 | ||
|
65fb1a3311 | ||
|
55eb9b5c12 | ||
ed71fce96f
|
|||
f1554f1131
|
|||
|
ea47e63660 |
@@ -14,6 +14,8 @@ COPY --chown=app ./.mvn/ .mvn
|
|||||||
COPY --chown=app ./mvnw ./pom.xml ./app.json ./
|
COPY --chown=app ./mvnw ./pom.xml ./app.json ./
|
||||||
COPY --chown=app ./src ./src
|
COPY --chown=app ./src ./src
|
||||||
|
|
||||||
|
RUN curl -OL https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
|
||||||
|
|
||||||
# Build the production package
|
# Build the production package
|
||||||
RUN ./mvnw --batch-mode clean verify -Pproduction -DskipTests
|
RUN ./mvnw --batch-mode clean verify -Pproduction -DskipTests
|
||||||
|
|
||||||
@@ -24,6 +26,11 @@ RUN useradd -m app
|
|||||||
USER app
|
USER app
|
||||||
|
|
||||||
COPY --chown=app --from=build /usr/src/app/target/*.jar /usr/app/website.jar
|
COPY --chown=app --from=build /usr/src/app/target/*.jar /usr/app/website.jar
|
||||||
|
COPY --chown=app --from=build /usr/src/app/opentelemetry-javaagent.jar /usr/app/opentelemetry-javaagent.jar
|
||||||
|
|
||||||
|
ENV JAVA_TOOL_OPTIONS="-javaagent:/usr/app/opentelemetry-javaagent.jar"
|
||||||
|
ENV OTEL_SERVICE_NAME="website"
|
||||||
|
ENV OTEL_EXPORTER_OTLP_ENDPOINT="http://opentelemetry-collector.web:4318"
|
||||||
|
|
||||||
HEALTHCHECK CMD curl --fail http://localhost:5000/actuator/health/liveness || exit 1
|
HEALTHCHECK CMD curl --fail http://localhost:5000/actuator/health/liveness || exit 1
|
||||||
|
|
||||||
|
6
pom.xml
6
pom.xml
@@ -12,16 +12,16 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<java.version>21</java.version>
|
<java.version>21</java.version>
|
||||||
<vaadin.version>24.5.0.beta3</vaadin.version>
|
<vaadin.version>24.6.0.alpha1</vaadin.version>
|
||||||
<spring-cloud.version>2023.0.3</spring-cloud.version>
|
<spring-cloud.version>2023.0.3</spring-cloud.version>
|
||||||
<spring-cloud-gcp.version>5.4.1</spring-cloud-gcp.version>
|
<spring-cloud-gcp.version>5.4.1</spring-cloud-gcp.version>
|
||||||
<spring-modulith.version>1.2.4</spring-modulith.version>
|
<spring-modulith.version>1.2.5</spring-modulith.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>3.3.4</version>
|
<version>3.3.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
9
src/main/java/dev/mars3142/fhq/client/AuthClient.java
Normal file
9
src/main/java/dev/mars3142/fhq/client/AuthClient.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package dev.mars3142.fhq.client;
|
||||||
|
|
||||||
|
import org.springframework.web.service.annotation.GetExchange;
|
||||||
|
|
||||||
|
public interface AuthClient {
|
||||||
|
|
||||||
|
@GetExchange("/v1/auth")
|
||||||
|
String getAuth();
|
||||||
|
}
|
@@ -1,9 +1,16 @@
|
|||||||
package dev.mars3142.fhq.client;
|
package dev.mars3142.fhq.client;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.service.annotation.GetExchange;
|
import org.springframework.web.service.annotation.GetExchange;
|
||||||
|
|
||||||
public interface TimeZoneClient {
|
public interface TimeZoneClient {
|
||||||
|
|
||||||
@GetExchange("/v1/timezone")
|
@GetExchange("/v1/timezone")
|
||||||
String getTimeZone();
|
String getTimeZone();
|
||||||
|
|
||||||
|
@GetExchange("/v1/timezone/{area}")
|
||||||
|
String getTimeZone(@PathVariable String area);
|
||||||
|
|
||||||
|
@GetExchange("/v1/timezone/{area}/{location}")
|
||||||
|
String getTimeZone(@PathVariable String area, @PathVariable String location);
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,9 @@
|
|||||||
package dev.mars3142.fhq.config;
|
package dev.mars3142.fhq.config;
|
||||||
|
|
||||||
|
import dev.mars3142.fhq.client.AuthClient;
|
||||||
import dev.mars3142.fhq.client.TimeZoneClient;
|
import dev.mars3142.fhq.client.TimeZoneClient;
|
||||||
|
import dev.mars3142.fhq.config.interceptor.AuthInterceptor;
|
||||||
|
import lombok.val;
|
||||||
import org.springframework.boot.web.client.ClientHttpRequestFactories;
|
import org.springframework.boot.web.client.ClientHttpRequestFactories;
|
||||||
import org.springframework.boot.web.client.ClientHttpRequestFactorySettings;
|
import org.springframework.boot.web.client.ClientHttpRequestFactorySettings;
|
||||||
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
|
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
|
||||||
@@ -17,22 +20,34 @@ public class RestClientConfig {
|
|||||||
@LoadBalanced
|
@LoadBalanced
|
||||||
@Bean
|
@Bean
|
||||||
RestClient.Builder restClientBuilder() {
|
RestClient.Builder restClientBuilder() {
|
||||||
return RestClient.builder();
|
return RestClient.builder()
|
||||||
|
.requestInterceptor(new AuthInterceptor());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public TimeZoneClient timeZoneClient(RestClient.Builder restClientBuilder) {
|
public AuthClient authClient(RestClient.Builder builder) {
|
||||||
RestClient restClient = restClientBuilder
|
val restClient = builder
|
||||||
|
.baseUrl("http://auth-service")
|
||||||
|
.requestFactory(getClientRequestFactory())
|
||||||
|
.build();
|
||||||
|
val restClientAdapter = RestClientAdapter.create(restClient);
|
||||||
|
val httpServiceProxyFactory = HttpServiceProxyFactory.builderFor(restClientAdapter).build();
|
||||||
|
return httpServiceProxyFactory.createClient(AuthClient.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public TimeZoneClient timeZoneClient(RestClient.Builder builder) {
|
||||||
|
val restClient = builder
|
||||||
.baseUrl("http://timezone-service")
|
.baseUrl("http://timezone-service")
|
||||||
.requestFactory(getClientRequestFactory())
|
.requestFactory(getClientRequestFactory())
|
||||||
.build();
|
.build();
|
||||||
var restClientAdapter = RestClientAdapter.create(restClient);
|
val restClientAdapter = RestClientAdapter.create(restClient);
|
||||||
var httpServiceProxyFactory = HttpServiceProxyFactory.builderFor(restClientAdapter).build();
|
val httpServiceProxyFactory = HttpServiceProxyFactory.builderFor(restClientAdapter).build();
|
||||||
return httpServiceProxyFactory.createClient(TimeZoneClient.class);
|
return httpServiceProxyFactory.createClient(TimeZoneClient.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ClientHttpRequestFactory getClientRequestFactory() {
|
private ClientHttpRequestFactory getClientRequestFactory() {
|
||||||
ClientHttpRequestFactorySettings clientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.DEFAULTS;
|
val clientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.DEFAULTS;
|
||||||
return ClientHttpRequestFactories.get(clientHttpRequestFactorySettings);
|
return ClientHttpRequestFactories.get(clientHttpRequestFactorySettings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,19 @@
|
|||||||
|
package dev.mars3142.fhq.config.interceptor;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import lombok.val;
|
||||||
|
import org.springframework.http.HttpRequest;
|
||||||
|
import org.springframework.http.client.ClientHttpRequestExecution;
|
||||||
|
import org.springframework.http.client.ClientHttpRequestInterceptor;
|
||||||
|
import org.springframework.http.client.ClientHttpResponse;
|
||||||
|
|
||||||
|
public class AuthInterceptor implements ClientHttpRequestInterceptor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
|
||||||
|
throws IOException {
|
||||||
|
val headers = request.getHeaders();
|
||||||
|
headers.add("X-FHQ-USER-ID", "Vaadin");
|
||||||
|
return execution.execute(request, body);
|
||||||
|
}
|
||||||
|
}
|
@@ -15,7 +15,7 @@ import lombok.val;
|
|||||||
public class LandingPageView extends Composite<VerticalLayout> {
|
public class LandingPageView extends Composite<VerticalLayout> {
|
||||||
|
|
||||||
public LandingPageView(TimeZoneClient client) {
|
public LandingPageView(TimeZoneClient client) {
|
||||||
val timeZone = client.getTimeZone();
|
val timeZone = client.getTimeZone("Europe", "Berlin");
|
||||||
val verticalLayout = new VerticalLayout();
|
val verticalLayout = new VerticalLayout();
|
||||||
verticalLayout.setSizeFull();
|
verticalLayout.setSizeFull();
|
||||||
verticalLayout.add(new Text(timeZone));
|
verticalLayout.add(new Text(timeZone));
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
server:
|
|
||||||
port: ${PORT:8090}
|
|
||||||
|
|
||||||
vaadin:
|
|
||||||
# To improve the performance during development.
|
|
||||||
# For more information https://vaadin.com/docs/latest/integrations/spring/configuration#special-configuration-parameters
|
|
||||||
allowed-packages : com.vaadin,org.vaadin,dev.hilla,dev.mars3142
|
|
||||||
|
|
||||||
backend:
|
|
||||||
uri: http://localhost:8091/v1
|
|
||||||
|
|
||||||
eureka:
|
|
||||||
client:
|
|
||||||
service-url:
|
|
||||||
defaultZone: http://localhost:8761/eureka
|
|
@@ -1,52 +0,0 @@
|
|||||||
logging:
|
|
||||||
level:
|
|
||||||
org:atmosphere: warn
|
|
||||||
|
|
||||||
spring:
|
|
||||||
application:
|
|
||||||
name: website
|
|
||||||
mustache:
|
|
||||||
check-template-location: false
|
|
||||||
jpa:
|
|
||||||
defer-datasource-initialization: true
|
|
||||||
|
|
||||||
backend:
|
|
||||||
uri: https://api.firmware-hq.dev/v1
|
|
||||||
|
|
||||||
eureka:
|
|
||||||
client:
|
|
||||||
register-with-eureka: true
|
|
||||||
fetch-registry: true
|
|
||||||
service-url:
|
|
||||||
defaultZone: http://eureka-service.web:8761/eureka
|
|
||||||
instance:
|
|
||||||
instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
|
|
||||||
|
|
||||||
info:
|
|
||||||
application:
|
|
||||||
name: ${spring.application.name}
|
|
||||||
version: '@project.version@'
|
|
||||||
spring-cloud-version: '@spring-cloud.version@'
|
|
||||||
spring-boot-version: '@project.parent.version@'
|
|
||||||
|
|
||||||
management:
|
|
||||||
endpoint:
|
|
||||||
health:
|
|
||||||
probes:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
server:
|
|
||||||
port: ${PORT:8080}
|
|
||||||
shutdown: graceful
|
|
||||||
error:
|
|
||||||
include-message: on_param
|
|
||||||
include-stacktrace: on_param
|
|
||||||
|
|
||||||
sentry:
|
|
||||||
dsn: https://354321d371291036cffcdb5b1a72fd6e@o394865.ingest.us.sentry.io/4507718826262528
|
|
||||||
environment: edge-service
|
|
||||||
|
|
||||||
# Set traces_sample_rate to 1.0 to capture 100%
|
|
||||||
# of transactions for tracing.
|
|
||||||
# We recommend adjusting this value in production.
|
|
||||||
tracesSampleRate: 1.0
|
|
6
src/test/resources/bootstrap.yml
Normal file
6
src/test/resources/bootstrap.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
eureka:
|
||||||
|
client:
|
||||||
|
register-with-eureka: false
|
||||||
|
fetch-registry: false
|
||||||
|
service-url:
|
||||||
|
defaultZone: ${EUREKA}
|
Reference in New Issue
Block a user