diff --git a/airports-flight-service/pom.xml b/airports-flight-service/pom.xml index 55bfa6326a2f4ff678796eb3c01a6687b5ed0d19..5b7050342df20a78eea22a89901dcc05ca79ac47 100644 --- a/airports-flight-service/pom.xml +++ b/airports-flight-service/pom.xml @@ -38,6 +38,10 @@ <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> </dependency> + <dependency> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-registry-prometheus</artifactId> + </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> diff --git a/airports-flight-service/src/main/java/cz/muni/fi/pa165/SwaggerConfig.java b/airports-flight-service/src/main/java/cz/muni/fi/pa165/SwaggerConfig.java index 62e64199658802c17cd6c954e52e87a9370b247e..d0aa68b54ee1d9cfd6c78bc4738062da621a082c 100644 --- a/airports-flight-service/src/main/java/cz/muni/fi/pa165/SwaggerConfig.java +++ b/airports-flight-service/src/main/java/cz/muni/fi/pa165/SwaggerConfig.java @@ -1,17 +1,70 @@ package cz.muni.fi.pa165; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.lang.reflect.Field; +import java.util.List; +import java.util.stream.Collectors; + + @Configuration @EnableSwagger2 public class SwaggerConfig { + @Bean // This bean is required when you want swagger and actuator to work together + public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings( + List<T> mappings) { + List<T> copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List<RequestMappingInfoHandlerMapping>) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } + + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.regex("/manage.*")) + .build(); + } + @Bean public Docket facadesV1Api() { return createDocket() @@ -27,4 +80,5 @@ public class SwaggerConfig { private Docket createDocket() { return new Docket(DocumentationType.SWAGGER_2); } + } diff --git a/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/health/CustomHealthIndicator.java b/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/health/CustomHealthIndicator.java new file mode 100644 index 0000000000000000000000000000000000000000..cab6cb55ebc8bf3f0c50d33f8a9122e5db856410 --- /dev/null +++ b/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/health/CustomHealthIndicator.java @@ -0,0 +1,23 @@ +package cz.muni.fi.pa165.observations.health; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.stereotype.Component; + +@Component +public class CustomHealthIndicator implements HealthIndicator { + + @Autowired + private HealthProvider healthProvider; + + @Override + public Health health() { + boolean systemHealth = healthProvider.getSystemHealth(); + if (systemHealth) { + return Health.up().build(); + } else { + return Health.down().withDetail("error", "injected failure").build(); + } + } +} \ No newline at end of file diff --git a/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/health/HealthProvider.java b/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/health/HealthProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..31959583ea4a042aebeefe52d8b20f0cc73a8fee --- /dev/null +++ b/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/health/HealthProvider.java @@ -0,0 +1,15 @@ +package cz.muni.fi.pa165.observations.health; + +import org.springframework.stereotype.Component; + +import java.util.concurrent.atomic.AtomicInteger; + +@Component +public class HealthProvider { + + private AtomicInteger counter = new AtomicInteger(0); + + public boolean getSystemHealth() { + return counter.getAndIncrement() % 2 == 0; + } +} diff --git a/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/info/CustomInfoContributor.java b/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/info/CustomInfoContributor.java new file mode 100644 index 0000000000000000000000000000000000000000..903740f24a508116796932f5f45301ac141fcde3 --- /dev/null +++ b/airports-flight-service/src/main/java/cz/muni/fi/pa165/observations/info/CustomInfoContributor.java @@ -0,0 +1,14 @@ +package cz.muni.fi.pa165.observations.info; + +import org.springframework.boot.actuate.info.Info.Builder; +import org.springframework.boot.actuate.info.InfoContributor; +import org.springframework.stereotype.Component; + +@Component +public class CustomInfoContributor implements InfoContributor { + + @Override + public void contribute(Builder builder) { + builder.withDetail("course", "PA165"); + } +} diff --git a/airports-flight-service/src/main/resources/application.properties b/airports-flight-service/src/main/resources/application.properties index ad9731a882a7ac6c967df017036f71fd14911df9..debf240735b6a373aa52a6a8cd6560de43c59865 100644 --- a/airports-flight-service/src/main/resources/application.properties +++ b/airports-flight-service/src/main/resources/application.properties @@ -27,25 +27,14 @@ application-version=1.0 logging.level.org.springframework.web=DEBUG logging.level.io.springfox=DEBUG -management.endpoints.web.exposure.include=info,health,metrics,loggers +management.endpoints.web.exposure.include=info,health,metrics,loggers,prometheus management.endpoint.health.show-details=always management.endpoint.health.probes.enabled=true - - -#spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect -#spring.jpa.hibernate.ddl-auto=update -#spring.jpa.generate-ddl=true -#spring.jpa.show-sql=true -#spring.datasource.driver-class-name=org.postgresql.Driver -#spring.datasource.url=jdbc:postgresql://localhost:5432/airport-manager -#spring.datasource.username=postgres -#spring.datasource.password=root -#spring.jpa.properties.hibernate.hbm2ddl.create_namespaces=true -#jakarta.peristence.create-database-schemas=true -# -#springdoc.swagger-ui.path=/swagger-ui.html -#application-description=API Description -#application-version=1.0 -# -#logging.level.org.springframework.web=DEBUG -#logging.level.io.springfox=DEBUG \ No newline at end of file +management.endpoint.info.enabled=true +management.endpoint.env.enabled=true +management.context-path=/manage +management.endpoints.web.base-path=/manage + +info.app.encoding=UTF-8 +info.app.java.source=17 +info.app.java.target=17 \ No newline at end of file diff --git a/airports-hr-service/pom.xml b/airports-hr-service/pom.xml index 95b55a572e3bb2fbf72d355304efd3f681e24df2..183cd6760476fe85dfe974614ac13501fbefbb7f 100644 --- a/airports-hr-service/pom.xml +++ b/airports-hr-service/pom.xml @@ -45,6 +45,10 @@ <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> </dependency> + <dependency> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-registry-prometheus</artifactId> + </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/SwaggerConfig.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/SwaggerConfig.java index 2cdfc4b376fcb0759e6272520f95e63739562478..08c6e6dc010b9a3942e114557400fe2dc6fbcbd4 100644 --- a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/SwaggerConfig.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/SwaggerConfig.java @@ -1,17 +1,70 @@ package cz.muni.fi.pa165.hr; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.lang.reflect.Field; +import java.util.List; +import java.util.stream.Collectors; + + @Configuration @EnableSwagger2 public class SwaggerConfig { + @Bean // This bean is required when you want swagger and actuator to work together + public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings( + List<T> mappings) { + List<T> copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List<RequestMappingInfoHandlerMapping>) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } + + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.regex("/manage.*")) + .build(); + } + @Bean public Docket facadesV1Api() { return createDocket() @@ -26,4 +79,5 @@ public class SwaggerConfig { private Docket createDocket() { return new Docket(DocumentationType.SWAGGER_2); } + } \ No newline at end of file diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/health/CustomHealthIndicator.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/health/CustomHealthIndicator.java new file mode 100644 index 0000000000000000000000000000000000000000..7d86997f753d7513c919ed8c144a4507a1aa6342 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/health/CustomHealthIndicator.java @@ -0,0 +1,23 @@ +package cz.muni.fi.pa165.hr.observations.health; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.stereotype.Component; + +@Component +public class CustomHealthIndicator implements HealthIndicator { + + @Autowired + private HealthProvider healthProvider; + + @Override + public Health health() { + boolean systemHealth = healthProvider.getSystemHealth(); + if (systemHealth) { + return Health.up().build(); + } else { + return Health.down().withDetail("error", "injected failure").build(); + } + } +} diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/health/HealthProvider.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/health/HealthProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..c756864d410e0eaac9e1067ca70869cd8cecca09 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/health/HealthProvider.java @@ -0,0 +1,15 @@ +package cz.muni.fi.pa165.hr.observations.health; + +import org.springframework.stereotype.Component; + +import java.util.concurrent.atomic.AtomicInteger; + +@Component +public class HealthProvider { + + private AtomicInteger counter = new AtomicInteger(0); + + public boolean getSystemHealth() { + return counter.getAndIncrement() % 2 == 0; + } +} diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/info/CustomInfoContributor.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/info/CustomInfoContributor.java new file mode 100644 index 0000000000000000000000000000000000000000..1a8bbdb94ad0d0687b46c76bca3f593c40cfd7c6 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/observations/info/CustomInfoContributor.java @@ -0,0 +1,14 @@ +package cz.muni.fi.pa165.hr.observations.info; + +import org.springframework.boot.actuate.info.Info.Builder; +import org.springframework.boot.actuate.info.InfoContributor; +import org.springframework.stereotype.Component; + +@Component +public class CustomInfoContributor implements InfoContributor { + + @Override + public void contribute(Builder builder) { + builder.withDetail("course", "PA165"); + } +} diff --git a/airports-hr-service/src/main/resources/application.properties b/airports-hr-service/src/main/resources/application.properties index 22ceb1220ca23da8297b84bb5bac30e424e6a2af..c0ba2135525c49153c3149b5091a899a518c0492 100644 --- a/airports-hr-service/src/main/resources/application.properties +++ b/airports-hr-service/src/main/resources/application.properties @@ -16,4 +16,14 @@ application-version=1.0 logging.level.org.springframework.web=DEBUG logging.level.io.springfox=DEBUG -management.endpoints.web.exposure.include=info,health,metrics,loggers \ No newline at end of file +management.endpoints.web.exposure.include=info,health,metrics,loggers,prometheus +management.endpoint.health.show-details=always +management.endpoint.health.probes.enabled=true +management.endpoint.info.enabled=true +management.endpoint.env.enabled=true +management.context-path=/manage +management.endpoints.web.base-path=/manage + +info.app.encoding=UTF-8 +info.app.java.source=17 +info.app.java.target=17 \ No newline at end of file diff --git a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/SwaggerConfig.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/SwaggerConfig.java index 9dd495ee46b029639a40116099da6b826e26a424..99e094a3fa9ee94d9e64b6bf119b406bff6f2b5d 100644 --- a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/SwaggerConfig.java +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/SwaggerConfig.java @@ -23,30 +23,6 @@ import java.util.stream.Collectors; @EnableSwagger2 public class SwaggerConfig { - @Bean - public Docket facadesV1Api() { - return createDocket() - .groupName("Planes") - .select() - .apis(RequestHandlerSelectors.basePackage( - PlaneController.class.getPackageName())) - .paths(PathSelectors.any()) - .build(); - } - - @Bean - public Docket api() { - return new Docket(DocumentationType.SWAGGER_2) - .select() - .apis(RequestHandlerSelectors.any()) - .paths(PathSelectors.regex("/manage.*")) - .build(); - } - - private Docket createDocket() { - return new Docket(DocumentationType.SWAGGER_2); - } - @Bean // This bean is required when you want swagger and actuator to work together public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { return new BeanPostProcessor() { @@ -79,4 +55,28 @@ public class SwaggerConfig { } }; } + + @Bean + public Docket facadesV1Api() { + return createDocket() + .groupName("Planes") + .select() + .apis(RequestHandlerSelectors.basePackage( + PlaneController.class.getPackageName())) + .paths(PathSelectors.any()) + .build(); + } + + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.regex("/manage.*")) + .build(); + } + + private Docket createDocket() { + return new Docket(DocumentationType.SWAGGER_2); + } } \ No newline at end of file diff --git a/airports-service/pom.xml b/airports-service/pom.xml index 0ee0bf9218e6dc9c9dd6b52317ab1d11b86ccbc8..8645e8d5e39482dc4f2a4dba319850278b43d67e 100644 --- a/airports-service/pom.xml +++ b/airports-service/pom.xml @@ -39,6 +39,10 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> + <dependency> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-registry-prometheus</artifactId> + </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/SwaggerConfig.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/SwaggerConfig.java index cba41b5e286b4fb211283152f31a7af40f249c12..6ffba8ea2def8e9b4a93598a9663044fd461dc62 100644 --- a/airports-service/src/main/java/cz/muni/fi/pa165/airport/SwaggerConfig.java +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/SwaggerConfig.java @@ -1,17 +1,70 @@ package cz.muni.fi.pa165.airport; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.lang.reflect.Field; +import java.util.List; +import java.util.stream.Collectors; + + @Configuration @EnableSwagger2 public class SwaggerConfig { + @Bean // This bean is required when you want swagger and actuator to work together + public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings( + List<T> mappings) { + List<T> copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List<RequestMappingInfoHandlerMapping>) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } + + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.regex("/manage.*")) + .build(); + } + @Bean public Docket facadesV1Api() { return createDocket() @@ -26,4 +79,5 @@ public class SwaggerConfig { private Docket createDocket() { return new Docket(DocumentationType.SWAGGER_2); } + } \ No newline at end of file diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/health/CustomHealthIndicator.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/health/CustomHealthIndicator.java new file mode 100644 index 0000000000000000000000000000000000000000..409a131b2e944c7e29aa1abc6943c68347704eb8 --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/health/CustomHealthIndicator.java @@ -0,0 +1,23 @@ +package cz.muni.fi.pa165.airport.observations.health; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.stereotype.Component; + +@Component +public class CustomHealthIndicator implements HealthIndicator { + + @Autowired + private HealthProvider healthProvider; + + @Override + public Health health() { + boolean systemHealth = healthProvider.getSystemHealth(); + if (systemHealth) { + return Health.up().build(); + } else { + return Health.down().withDetail("error", "injected failure").build(); + } + } +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/health/HealthProvider.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/health/HealthProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..cdc6f1c793c582ef81c1c9aa723b4f9f7f91a62b --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/health/HealthProvider.java @@ -0,0 +1,15 @@ +package cz.muni.fi.pa165.airport.observations.health; + +import org.springframework.stereotype.Component; + +import java.util.concurrent.atomic.AtomicInteger; + +@Component +public class HealthProvider { + + private AtomicInteger counter = new AtomicInteger(0); + + public boolean getSystemHealth() { + return counter.getAndIncrement() % 2 == 0; + } +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/info/CustomInfoContributor.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/info/CustomInfoContributor.java new file mode 100644 index 0000000000000000000000000000000000000000..da6d0e1e45a6742d3fbdc384a5d901eaf705c109 --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/observations/info/CustomInfoContributor.java @@ -0,0 +1,14 @@ +package cz.muni.fi.pa165.airport.observations.info; + +import org.springframework.boot.actuate.info.Info.Builder; +import org.springframework.boot.actuate.info.InfoContributor; +import org.springframework.stereotype.Component; + +@Component +public class CustomInfoContributor implements InfoContributor { + + @Override + public void contribute(Builder builder) { + builder.withDetail("course", "PA165"); + } +} diff --git a/airports-service/src/main/resources/application.properties b/airports-service/src/main/resources/application.properties index 22ceb1220ca23da8297b84bb5bac30e424e6a2af..c0ba2135525c49153c3149b5091a899a518c0492 100644 --- a/airports-service/src/main/resources/application.properties +++ b/airports-service/src/main/resources/application.properties @@ -16,4 +16,14 @@ application-version=1.0 logging.level.org.springframework.web=DEBUG logging.level.io.springfox=DEBUG -management.endpoints.web.exposure.include=info,health,metrics,loggers \ No newline at end of file +management.endpoints.web.exposure.include=info,health,metrics,loggers,prometheus +management.endpoint.health.show-details=always +management.endpoint.health.probes.enabled=true +management.endpoint.info.enabled=true +management.endpoint.env.enabled=true +management.context-path=/manage +management.endpoints.web.base-path=/manage + +info.app.encoding=UTF-8 +info.app.java.source=17 +info.app.java.target=17 \ No newline at end of file