From 6d9432b6beded07cbaaf1f74c61b996a3e8f390b Mon Sep 17 00:00:00 2001 From: wlatif Date: Thu, 20 Jul 2023 21:52:28 +0200 Subject: [PATCH] Apply PR requested changes --- plume-framework-dependencies/pom.xml | 2 +- .../info/monitoring/info/InfoService.java | 42 ------ .../.gitignore | 0 .../README.md | 134 +++++++++--------- .../pom.xml | 13 +- .../JerseyMonitoringConfigurationService.java | 9 +- .../guice/GuiceJacksonWithMetricsModule.java | 12 ++ .../guice/GuiceJerseyMonitoringModule.java | 12 ++ .../JerseyMonitoringObjectMapperProvider.java | 22 ++- .../utils}/health/HealthCheckBuilder.java | 9 +- .../utils}/health/beans/HealthStatus.java | 11 +- .../healthchecks/DatabaseHealthCheck.java | 2 +- .../utils/info/ApplicationInfoProvider.java | 39 +++++ .../utils/info/beans/ApplicationInfo.java | 6 +- .../utils}/metrics/MetricsCheckBuilder.java | 2 +- .../plume-web-jersey-monitoring.conf | 0 pom.xml | 2 +- 17 files changed, 176 insertions(+), 141 deletions(-) delete mode 100644 plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/InfoService.java rename {plume-web-jersey-info => plume-web-jersey-monitoring}/.gitignore (100%) rename {plume-web-jersey-info => plume-web-jersey-monitoring}/README.md (55%) rename {plume-web-jersey-info => plume-web-jersey-monitoring}/pom.xml (85%) rename plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/configuration/JerseyInfoConfigurationService.java => plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/configuration/JerseyMonitoringConfigurationService.java (65%) create mode 100644 plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJacksonWithMetricsModule.java create mode 100644 plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJerseyMonitoringModule.java rename plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/json/JerseyInfoObjectMapper.java => plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/json/JerseyMonitoringObjectMapperProvider.java (59%) rename {plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring => plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils}/health/HealthCheckBuilder.java (83%) rename {plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring => plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils}/health/beans/HealthStatus.java (53%) rename {plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring => plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils}/health/healthchecks/DatabaseHealthCheck.java (94%) create mode 100644 plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/ApplicationInfoProvider.java rename plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/beans/AppInformation.java => plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/beans/ApplicationInfo.java (75%) rename {plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring => plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils}/metrics/MetricsCheckBuilder.java (95%) rename plume-web-jersey-info/src/main/resources/plume-web-jersey-info.conf => plume-web-jersey-monitoring/src/main/resources/plume-web-jersey-monitoring.conf (100%) diff --git a/plume-framework-dependencies/pom.xml b/plume-framework-dependencies/pom.xml index 6fead3f..448fed8 100644 --- a/plume-framework-dependencies/pom.xml +++ b/plume-framework-dependencies/pom.xml @@ -92,7 +92,7 @@ com.coreoz - plume-web-jersey-info + plume-web-jersey-monitoring ${project.version} diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/InfoService.java b/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/InfoService.java deleted file mode 100644 index 3cb9514..0000000 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/InfoService.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.coreoz.plume.jersey.info.monitoring.info; - -import com.coreoz.plume.jersey.info.configuration.JerseyInfoConfigurationService; -import com.coreoz.plume.jersey.info.monitoring.info.beans.AppInformation; -import com.coreoz.plume.jersey.info.json.JerseyInfoObjectMapper; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.maven.model.Model; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; - -import javax.inject.Inject; -import javax.inject.Singleton; -import java.io.FileReader; -import java.util.Map; - -@Singleton -public class InfoService { - private final JerseyInfoConfigurationService configurationService; - private final ObjectMapper objectMapper = JerseyInfoObjectMapper.get(); - - @Inject - private InfoService(JerseyInfoConfigurationService configurationService) { - this.configurationService = configurationService; - } - - public String getAppInfo() { - MavenXpp3Reader reader = new MavenXpp3Reader(); - try { - Model model = reader.read(new FileReader("pom.xml")); - Map additionalInformation = this.configurationService.getCustomInfo(); - return this.objectMapper.writeValueAsString( - new AppInformation( - model.getName(), - model.getDescription(), - model.getVersion(), - additionalInformation.isEmpty() ? null : additionalInformation - ) - ); - } catch (Exception e) { - throw new RuntimeException("Failed to retrieve the application information", e); - } - } -} diff --git a/plume-web-jersey-info/.gitignore b/plume-web-jersey-monitoring/.gitignore similarity index 100% rename from plume-web-jersey-info/.gitignore rename to plume-web-jersey-monitoring/.gitignore diff --git a/plume-web-jersey-info/README.md b/plume-web-jersey-monitoring/README.md similarity index 55% rename from plume-web-jersey-info/README.md rename to plume-web-jersey-monitoring/README.md index c230695..ce11781 100644 --- a/plume-web-jersey-info/README.md +++ b/plume-web-jersey-monitoring/README.md @@ -8,13 +8,26 @@ This module provides utilities to expose backend monitoring API similarly to wha Setup ----- +### Maven dependency +Add the dependency to the `pom.xml` file ```xml com.coreoz - plume-web-jersey-info + plume-web-jersey-monitoring ``` +### Install Guice modules +In your application module : +1. replace `GuiceJacksonModule`by the `GuiceJacksonWithMetricsModule` +2. install the `GuiceJerseyMonitoringModule` + +~~`install(new GuiceJacksonModule());`~~ +```java +install(new GuiceJacksonWithMetricsModule()); +install(new GuiceJerseyMonitoringModule()); +``` + Features ------- @@ -25,34 +38,12 @@ The `HealthCheckBuilder` provides a simple API to monitor the health status of y - `registerDatabaseHealthCheck`: Register the built-in database health check - `build`: create a health status provider -Usage example: -**Web-service** -```java -@Path("/monitor/health") -@Singleton -public class HealthWs { - private static final Logger logger = LoggerFactory.getLogger(HealthWs.class); - - private final Provider healthStatusProvider; +### ApplicationInfo +The `ApplicationInfo` is a singleton object available through dependency injection. +It contains the basic application information retrieved from the `Pom.xml` file. - @Inject - public HealthWs(TransactionManager transactionManager, HealthCheckService healthCheckService) { - this.healthStatusProvider = new HealthCheckBuilder() - .registerDatabaseHealthCheck() - .build(); - } - - @GET - @Produces(MediaType.APPLICATION_JSON) - public HealthStatus get(@Context ContainerRequestContext requestContext) { - return this.healthStatusProvider.get(); - } -} -``` - -### InfoService -The `InfoService` provides a unique getter that retrieves the basic application information from the `Pom.xml` : +`ApplicationInfo` content: - name - description - version @@ -67,27 +58,6 @@ plm-web-jersey-info = { } ``` -Usage example: - -**Web-service** -```java -@Path("/monitor/info") -@Singleton -public class InfoWs { - private final InfoService infoService; - - @Inject - public InfoWs(InfoService infoService) { - this.infoService = infoService; - } - - @GET - public String get(@Context ContainerRequestContext requestContext) { - return this.infoService.getAppInfo(); - } -} -``` - ### MetricsCheckBuilder The `MetricsCheckBuilder` uses the [io.dropwizard.metrics](https://github.com/dropwizard/metrics) library to provide some basic functionality for monitoring your application's metrics (CPU usage, memory usage, ...). @@ -97,38 +67,68 @@ Exposed API : - `registerJvmMetrics`: Register the basic JVM metrics to monitor - `build`: create a metrics provider that provides the status of the metrics that are monitored. -Usage example: + +Usage example +------- **Web-service** + ```java -@Path("/monitor/metrics") +import com.coreoz.plume.jersey.security.permission.PublicApi; + +@Path("/monitor") +// Authentication is done directly by the web service without any annotation +@PublicApi @Singleton -public class MetricsWs { - private final JerseyInfoObjectMapper objectMapper = JerseyInfoObjectMapper.get(); +public class MonitoringWs { + private final ApplicationInfo applicationInfo; + private final Provider healthStatusProvider; private final Provider> metricsStatusProvider; + private final BasicAuthenticator basicAuthenticator; + @Inject - public MetricsWs(MetricsService metricsService) { + public MonitoringWs(ApplicationInfo applicationInfo) { + this.applicationInfo = applicationInfo; + // Registering health checks + this.healthStatusProvider = new HealthCheckBuilder() + .registerDatabaseHealthCheck() + .build(); + + // Registering metrics to monitor this.metricsStatusProvider = new MetricsCheckBuilder() .registerJvmMetrics() .build(); + + // require authentication to access the supervision URL + this.basicAuthenticator = BasicAuthenticator.fromSingleCredentials( + "SINGLE_USERNAME", + "PASSWORD", + "MY_REALM" + ); } - + @GET - @Produces(MediaType.APPLICATION_JSON) - public String get(@Context ContainerRequestContext requestContext) throws JsonProcessingException { - return objectMapper.writeValueAsString(Map.of( - "metrics", metricsStatusProvider.get() - )); + @Path("/info") + public ApplicationInfo get(@Context ContainerRequestContext requestContext) { + basicAuthenticator.requireAuthentication(requestContext); + return this.infoService.getAppInfo(); } -} -``` -### JerseyInfoObjectMapper -Provides an ObjectMapper to serialize the types provided by plume-web-jersey-info services. - -Usage example: + @GET + @Path("/health") + @Produces(MediaType.APPLICATION_JSON) + public HealthStatus get(@Context ContainerRequestContext requestContext) { + basicAuthenticator.requireAuthentication(requestContext); + return this.healthStatusProvider.get(); + } -```java - private final ObjectMapper objectMapper = JerseyInfoObjectMapper.get(); + @GET + @Path("/metrics") + @Produces(MediaType.APPLICATION_JSON) + public String get(@Context ContainerRequestContext requestContext) { + basicAuthenticator.requireAuthentication(requestContext); + return metricsStatusProvider.get(); + } +} ``` diff --git a/plume-web-jersey-info/pom.xml b/plume-web-jersey-monitoring/pom.xml similarity index 85% rename from plume-web-jersey-info/pom.xml rename to plume-web-jersey-monitoring/pom.xml index e0a37ad..862e53a 100644 --- a/plume-web-jersey-info/pom.xml +++ b/plume-web-jersey-monitoring/pom.xml @@ -8,9 +8,9 @@ 4.1.2-SNAPSHOT - plume-web-jersey-info + plume-web-jersey-monitoring jar - Plume Jersey info services + Plume Jersey monitoring @@ -66,6 +66,15 @@ com.coreoz plume-db + true + + + com.google.inject + guice + + + com.coreoz + plume-web-jersey diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/configuration/JerseyInfoConfigurationService.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/configuration/JerseyMonitoringConfigurationService.java similarity index 65% rename from plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/configuration/JerseyInfoConfigurationService.java rename to plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/configuration/JerseyMonitoringConfigurationService.java index 172f14b..9df9194 100644 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/configuration/JerseyInfoConfigurationService.java +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/configuration/JerseyMonitoringConfigurationService.java @@ -1,4 +1,4 @@ -package com.coreoz.plume.jersey.info.configuration; +package com.coreoz.plume.jersey.monitoring.configuration; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; @@ -8,13 +8,12 @@ import java.util.Map; @Singleton -public class JerseyInfoConfigurationService { - +public class JerseyMonitoringConfigurationService { private final Config config; @Inject - public JerseyInfoConfigurationService(Config config) { - this.config = config.withFallback(ConfigFactory.parseResources("plume-web-jersey-info.conf")); + public JerseyMonitoringConfigurationService(Config config) { + this.config = config.withFallback(ConfigFactory.parseResources("plume-web-jersey-monitoring.conf")); } public Map getCustomInfo() { diff --git a/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJacksonWithMetricsModule.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJacksonWithMetricsModule.java new file mode 100644 index 0000000..7e6279f --- /dev/null +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJacksonWithMetricsModule.java @@ -0,0 +1,12 @@ +package com.coreoz.plume.jersey.monitoring.guice; + +import com.coreoz.plume.jersey.monitoring.json.JerseyMonitoringObjectMapperProvider; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.inject.AbstractModule; + +public class GuiceJacksonWithMetricsModule extends AbstractModule { + @Override + protected void configure() { + bind(ObjectMapper.class).toProvider(JerseyMonitoringObjectMapperProvider.class); + } +} diff --git a/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJerseyMonitoringModule.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJerseyMonitoringModule.java new file mode 100644 index 0000000..c72b2af --- /dev/null +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/guice/GuiceJerseyMonitoringModule.java @@ -0,0 +1,12 @@ +package com.coreoz.plume.jersey.monitoring.guice; + +import com.coreoz.plume.jersey.monitoring.utils.info.ApplicationInfoProvider; +import com.coreoz.plume.jersey.monitoring.utils.info.beans.ApplicationInfo; +import com.google.inject.AbstractModule; + +public class GuiceJerseyMonitoringModule extends AbstractModule { + @Override + protected void configure() { + bind(ApplicationInfo.class).toProvider(ApplicationInfoProvider.class); + } +} diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/json/JerseyInfoObjectMapper.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/json/JerseyMonitoringObjectMapperProvider.java similarity index 59% rename from plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/json/JerseyInfoObjectMapper.java rename to plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/json/JerseyMonitoringObjectMapperProvider.java index 7971dbb..7478c39 100644 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/json/JerseyInfoObjectMapper.java +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/json/JerseyMonitoringObjectMapperProvider.java @@ -1,14 +1,20 @@ -package com.coreoz.plume.jersey.info.json; +package com.coreoz.plume.jersey.monitoring.json; import com.codahale.metrics.json.HealthCheckModule; import com.codahale.metrics.json.MetricsModule; +import com.coreoz.plume.jersey.jackson.ObjectMapperProvider; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import javax.inject.Inject; +import javax.inject.Provider; +import javax.inject.Singleton; import java.util.concurrent.TimeUnit; -public class JerseyInfoObjectMapper { +@Singleton +public class JerseyMonitoringObjectMapperProvider implements Provider { + private final ObjectMapper objectMapper; private static final HealthCheckModule healthCheckModule = new HealthCheckModule(); private static final MetricsModule metricsModule = new MetricsModule( TimeUnit.SECONDS, @@ -16,15 +22,17 @@ public class JerseyInfoObjectMapper { false ); - private JerseyInfoObjectMapper() { - } - - public static ObjectMapper get() { - return new ObjectMapper() + @Inject + public JerseyMonitoringObjectMapperProvider(ObjectMapperProvider objectMapperProvider) { + this.objectMapper = objectMapperProvider.get() .registerModule(healthCheckModule) .registerModule(metricsModule) .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS) .enable(SerializationFeature.INDENT_OUTPUT) .setSerializationInclusion(JsonInclude.Include.NON_EMPTY); } + + public ObjectMapper get() { + return this.objectMapper; + } } diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/HealthCheckBuilder.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/HealthCheckBuilder.java similarity index 83% rename from plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/HealthCheckBuilder.java rename to plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/HealthCheckBuilder.java index 0daed01..9b5b30b 100644 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/HealthCheckBuilder.java +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/HealthCheckBuilder.java @@ -1,10 +1,10 @@ -package com.coreoz.plume.jersey.info.monitoring.health; +package com.coreoz.plume.jersey.monitoring.utils.health; import com.coreoz.plume.db.transaction.TransactionManager; -import com.coreoz.plume.jersey.info.monitoring.health.beans.HealthStatus; +import com.coreoz.plume.jersey.monitoring.utils.health.beans.HealthStatus; import com.codahale.metrics.health.HealthCheck; import com.codahale.metrics.health.HealthCheckRegistry; -import com.coreoz.plume.jersey.info.monitoring.health.healthchecks.DatabaseHealthCheck; +import com.coreoz.plume.jersey.monitoring.utils.health.healthchecks.DatabaseHealthCheck; import javax.inject.Provider; import java.util.SortedMap; @@ -12,9 +12,6 @@ public class HealthCheckBuilder { private final HealthCheckRegistry healthCheckRegistry = new HealthCheckRegistry(); - private HealthCheckBuilder() { - } - public HealthCheckBuilder registerHealthCheck(String name, HealthCheck healthCheck) { this.healthCheckRegistry.register(name, healthCheck); return this; diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/beans/HealthStatus.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/beans/HealthStatus.java similarity index 53% rename from plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/beans/HealthStatus.java rename to plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/beans/HealthStatus.java index 24585ef..3498991 100644 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/beans/HealthStatus.java +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/beans/HealthStatus.java @@ -1,23 +1,24 @@ -package com.coreoz.plume.jersey.info.monitoring.health.beans; +package com.coreoz.plume.jersey.monitoring.utils.health.beans; import com.codahale.metrics.health.HealthCheck; +import java.util.Map; import java.util.SortedMap; -public class HealthStatus{ +public class HealthStatus { private final boolean isHealthy; - private final SortedMap healthChecksResults; + private final Map healthChecksResults; public HealthStatus(boolean isHealthy, SortedMap healthChecksResults) { this.isHealthy = isHealthy; - this.healthChecksResults = healthChecksResults; + this.healthChecksResults = Map.copyOf(healthChecksResults); } public boolean isHealthy() { return isHealthy; } - public SortedMap getHealthChecksResults() { + public Map getHealthChecksResults() { return healthChecksResults; } } diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/healthchecks/DatabaseHealthCheck.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/healthchecks/DatabaseHealthCheck.java similarity index 94% rename from plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/healthchecks/DatabaseHealthCheck.java rename to plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/healthchecks/DatabaseHealthCheck.java index 5686962..3bcaa15 100644 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/health/healthchecks/DatabaseHealthCheck.java +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/health/healthchecks/DatabaseHealthCheck.java @@ -1,4 +1,4 @@ -package com.coreoz.plume.jersey.info.monitoring.health.healthchecks; +package com.coreoz.plume.jersey.monitoring.utils.health.healthchecks; import com.codahale.metrics.health.HealthCheck; import com.coreoz.plume.db.transaction.TransactionManager; diff --git a/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/ApplicationInfoProvider.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/ApplicationInfoProvider.java new file mode 100644 index 0000000..4054625 --- /dev/null +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/ApplicationInfoProvider.java @@ -0,0 +1,39 @@ +package com.coreoz.plume.jersey.monitoring.utils.info; + +import com.coreoz.plume.jersey.monitoring.configuration.JerseyMonitoringConfigurationService; +import com.coreoz.plume.jersey.monitoring.utils.info.beans.ApplicationInfo; +import org.apache.maven.model.Model; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; + +import javax.inject.Inject; +import javax.inject.Provider; +import javax.inject.Singleton; +import java.io.FileReader; +import java.util.Map; + +@Singleton +public class ApplicationInfoProvider implements Provider { + private final ApplicationInfo applicationInfo; + + @Inject + private ApplicationInfoProvider(JerseyMonitoringConfigurationService configurationService) { + MavenXpp3Reader reader = new MavenXpp3Reader(); + try { + Model model = reader.read(new FileReader("pom.xml")); + Map additionalInformation = configurationService.getCustomInfo(); + this.applicationInfo = new ApplicationInfo( + model.getName(), + model.getDescription(), + model.getVersion(), + additionalInformation.isEmpty() ? null : additionalInformation + ); + } catch (Exception e) { + throw new RuntimeException("Failed to retrieve the application information", e); + } + } + + @Override + public ApplicationInfo get() { + return this.applicationInfo; + } +} diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/beans/AppInformation.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/beans/ApplicationInfo.java similarity index 75% rename from plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/beans/AppInformation.java rename to plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/beans/ApplicationInfo.java index 67cf129..0ccf419 100644 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/info/beans/AppInformation.java +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/info/beans/ApplicationInfo.java @@ -1,14 +1,14 @@ -package com.coreoz.plume.jersey.info.monitoring.info.beans; +package com.coreoz.plume.jersey.monitoring.utils.info.beans; import java.util.Map; -public class AppInformation { +public class ApplicationInfo { private final String name; private final String description; private final String version; private final Map additionalInformation; - public AppInformation(String name, String description, String version, Map additionalInformation) { + public ApplicationInfo(String name, String description, String version, Map additionalInformation) { this.name = name; this.description = description; this.version = version; diff --git a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/metrics/MetricsCheckBuilder.java b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/metrics/MetricsCheckBuilder.java similarity index 95% rename from plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/metrics/MetricsCheckBuilder.java rename to plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/metrics/MetricsCheckBuilder.java index 8fdfdaf..88db257 100644 --- a/plume-web-jersey-info/src/main/java/com/coreoz/plume/jersey/info/monitoring/metrics/MetricsCheckBuilder.java +++ b/plume-web-jersey-monitoring/src/main/java/com/coreoz/plume/jersey/monitoring/utils/metrics/MetricsCheckBuilder.java @@ -1,4 +1,4 @@ -package com.coreoz.plume.jersey.info.monitoring.metrics; +package com.coreoz.plume.jersey.monitoring.utils.metrics; import com.codahale.metrics.Metric; import com.codahale.metrics.MetricRegistry; diff --git a/plume-web-jersey-info/src/main/resources/plume-web-jersey-info.conf b/plume-web-jersey-monitoring/src/main/resources/plume-web-jersey-monitoring.conf similarity index 100% rename from plume-web-jersey-info/src/main/resources/plume-web-jersey-info.conf rename to plume-web-jersey-monitoring/src/main/resources/plume-web-jersey-monitoring.conf diff --git a/pom.xml b/pom.xml index b0d2b89..fa277a7 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ plume-db-querydsl-codegen plume-db-test plume-web-jersey - plume-web-jersey-info + plume-web-jersey-monitoring