diff --git a/pom.xml b/pom.xml
index 6818795..176af75 100644
--- a/pom.xml
+++ b/pom.xml
@@ -295,6 +295,31 @@
2.26.0
test
+
+
+
+ org.springframework.boot
+ spring-boot-actuator
+ 2.1.18.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-actuator-autoconfigure
+ 2.1.18.RELEASE
+
+
+ io.micrometer
+ micrometer-core
+ 1.7.2
+
+
+ io.micrometer
+ micrometer-registry-prometheus
+ 1.7.2
+ compile
+
+
+
diff --git a/src/main/java/eu/dnetlib/repo/manager/config/AaiSecurityConfiguration.java b/src/main/java/eu/dnetlib/repo/manager/config/AaiSecurityConfiguration.java
index 67e5982..6f4a33d 100644
--- a/src/main/java/eu/dnetlib/repo/manager/config/AaiSecurityConfiguration.java
+++ b/src/main/java/eu/dnetlib/repo/manager/config/AaiSecurityConfiguration.java
@@ -60,11 +60,14 @@ public class AaiSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
- http.csrf().disable()
- .anonymous().disable()
+ http
+ .csrf().disable()
.authorizeRequests()
- .anyRequest().authenticated()
+ .regexMatchers("/actuator/.*").permitAll()
+ .regexMatchers("/metrics").permitAll()
+ .anyRequest().authenticated()
.and()
+// .anonymous().disable()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint())
.and()
diff --git a/src/main/java/eu/dnetlib/repo/manager/config/ActuatorConfig.java b/src/main/java/eu/dnetlib/repo/manager/config/ActuatorConfig.java
new file mode 100644
index 0000000..875b2a1
--- /dev/null
+++ b/src/main/java/eu/dnetlib/repo/manager/config/ActuatorConfig.java
@@ -0,0 +1,39 @@
+package eu.dnetlib.repo.manager.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration;
+import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
+import org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping;
+import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
+import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+
+import java.util.Collection;
+
+@Configuration
+@EnableWebMvc
+@Import({
+ EndpointAutoConfiguration.class,
+ PublicMetricsAutoConfiguration.class,
+// HealthIndicatorAutoConfiguration.class
+})
+
+public class ActuatorConfig { // TODO: remove this with migration to Spring Boot 2
+
+ @Bean
+ @Autowired
+ public EndpointHandlerMapping endpointHandlerMapping(Collection extends MvcEndpoint> endpoints) {
+ return new EndpointHandlerMapping(endpoints);
+ }
+
+ @Bean
+ @Autowired
+ public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
+ return new EndpointMvcAdapter(delegate);
+ }
+}
diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/PrometheusController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/PrometheusController.java
new file mode 100644
index 0000000..2024b2a
--- /dev/null
+++ b/src/main/java/eu/dnetlib/repo/manager/controllers/PrometheusController.java
@@ -0,0 +1,55 @@
+package eu.dnetlib.repo.manager.controllers;
+
+import eu.dnetlib.repo.manager.service.PiWikService;
+import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics;
+import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
+import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
+import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
+import io.micrometer.core.instrument.binder.system.ProcessorMetrics;
+import io.micrometer.core.instrument.binder.system.UptimeMetrics;
+import io.micrometer.prometheus.PrometheusConfig;
+import io.micrometer.prometheus.PrometheusMeterRegistry;
+import io.prometheus.client.exporter.common.TextFormat;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.File;
+
+
+@RestController
+@RequestMapping("/actuator/prometheus")
+public class PrometheusController { // TODO: remove this with migration to Spring Boot 2
+
+ private final PiWikService piWikService;
+
+ @Autowired
+ public PrometheusController(PiWikService piWikService) {
+ this.piWikService = piWikService;
+ }
+
+ @RequestMapping(method = RequestMethod.GET, path = "", produces = MediaType.TEXT_PLAIN_VALUE)
+ public String getPiwikMetrics() {
+ PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
+ registry.counter("total").increment(piWikService.getTotal());
+ registry.counter("validated").increment(piWikService.getValidated(true));
+
+ return registry.scrape(TextFormat.CONTENT_TYPE_004);
+ }
+
+ @RequestMapping(method = RequestMethod.GET, path = "metrics", produces = MediaType.TEXT_PLAIN_VALUE)
+ public String getMetrics() {
+ PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
+ new JvmThreadMetrics().bindTo(registry);
+ new JvmGcMetrics().bindTo(registry);
+ new JvmMemoryMetrics().bindTo(registry);
+ new DiskSpaceMetrics(new File("/")).bindTo(registry);
+ new ProcessorMetrics().bindTo(registry); // metrics related to the CPU stats
+ new UptimeMetrics().bindTo(registry);
+
+ return registry.scrape(TextFormat.CONTENT_TYPE_004);
+ }
+
+}
diff --git a/src/main/java/eu/dnetlib/repo/manager/service/PiWikService.java b/src/main/java/eu/dnetlib/repo/manager/service/PiWikService.java
index 2dc3b5f..84f212e 100644
--- a/src/main/java/eu/dnetlib/repo/manager/service/PiWikService.java
+++ b/src/main/java/eu/dnetlib/repo/manager/service/PiWikService.java
@@ -27,4 +27,8 @@ public interface PiWikService {
ResponseEntity