Index: modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/AbstractApiProfiler.java
===================================================================
--- modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/AbstractApiProfiler.java	(nonexistent)
+++ modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/AbstractApiProfiler.java	(revision 50895)
@@ -0,0 +1,18 @@
+package eu.dnetlib.openaire.exporter.aop;
+
+import io.prometheus.client.Gauge.Timer;
+import org.aspectj.lang.ProceedingJoinPoint;
+
+public abstract class AbstractApiProfiler {
+
+	// HELPER
+
+	protected Object _measure(final ProceedingJoinPoint joinPoint, final Timer requestTimer) throws Throwable {
+		try {
+			return joinPoint.proceed();
+		} finally {
+			requestTimer.setDuration();
+		}
+	}
+
+}
Index: modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/CommunityApiProfiler.java
===================================================================
--- modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/CommunityApiProfiler.java	(nonexistent)
+++ modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/CommunityApiProfiler.java	(revision 50895)
@@ -0,0 +1,53 @@
+package eu.dnetlib.openaire.exporter.aop;
+
+import io.prometheus.client.Gauge;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class CommunityApiProfiler extends AbstractApiProfiler {
+
+	private static final Gauge listCommunities = Gauge.build()
+			.name("DSM_listCommunities_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method CommunityApiController.listCommunities()")
+			.register();
+
+	@Around("execution(* eu.dnetlib.openaire.exporter.community.CommunityApiController.listCommunities(..))")
+	public Object logTimelistCommunities(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, listCommunities.startTimer());
+	}
+
+	private static final Gauge getCommunity = Gauge.build()
+			.name("DSM_getCommunity_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method CommunityApiController.getCommunity()")
+			.register();
+
+	@Around("execution(* eu.dnetlib.openaire.exporter.community.CommunityApiController.getCommunity(..))")
+	public Object logTimeGetCommunity(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, getCommunity.startTimer());
+	}
+
+	private static final Gauge getCommunityProjects = Gauge.build()
+			.name("DSM_getCommunityProjects_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method CommunityApiController.getCommunityProjects()")
+			.register();
+
+	@Around("execution(* eu.dnetlib.openaire.exporter.community.CommunityApiController.getCommunityProjects(..))")
+	public Object logTimeGetCommunityProjects(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, getCommunityProjects.startTimer());
+	}
+
+	private static final Gauge getCommunityContentproviders = Gauge.build()
+			.name("DSM_getCommunityContentproviders_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method CommunityApiController.getCommunityContentproviders()")
+			.register();
+
+	@Around("execution(* eu.dnetlib.openaire.exporter.community.CommunityApiController.getCommunityContentproviders(..))")
+	public Object logTimeGetCommunityContentproviders(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, getCommunityContentproviders.startTimer());
+	}
+
+}
Index: modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/DatasourceApiProfiler.java
===================================================================
--- modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/DatasourceApiProfiler.java	(revision 50894)
+++ modules/dnet-openaire-exporter/trunk/src/main/java/eu/dnetlib/openaire/exporter/aop/DatasourceApiProfiler.java	(revision 50895)
@@ -11,37 +11,46 @@
  */
 @Aspect
 @Component
-public class DatasourceApiProfiler {
+public class DatasourceApiProfiler extends AbstractApiProfiler {
 
-	private static final Gauge datasourceByIdGauge = Gauge.build()
-			.name("DSM_getDsById_requests_latency_seconds")
-			.help("Request latency in seconds for invocations of the method eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.getDs()")
+	private static final Gauge dsCountries = Gauge.build()
+			.name("DSM_listCountries_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method DatasourcesApiController.listCountries()")
 			.register();
 
-	@Around("execution(* eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.getDs(..))")
-	public Object logTimeGetDsById(final ProceedingJoinPoint joinPoint) throws Throwable {
-		final Gauge.Timer requestTimer = datasourceByIdGauge.startTimer();
-		try {
-			return joinPoint.proceed();
-		} finally {
-			requestTimer.setDuration();
-		}
+	@Around("execution(* eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.listCountries(..))")
+	public Object logTimelistCountries(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, dsCountries.startTimer());
 	}
 
-	private static final Gauge datasourceByName = Gauge.build()
-			.name("DSM_searchDsByName_requests_latency_seconds")
-			.help("Request latency in seconds for invocations of the method eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.searchByName()")
+	private static final Gauge dsSearch = Gauge.build()
+			.name("DSM_search_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method DatasourcesApiController.search()")
 			.register();
 
-	@Around("execution(* eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.searchByName(..))")
-	public Object logTimeSearchDsByName(final ProceedingJoinPoint joinPoint) throws Throwable {
-		final Gauge.Timer requestTimer = datasourceByName.startTimer();
-		try {
-			return joinPoint.proceed();
-		} finally {
-			requestTimer.setDuration();
-		}
+	@Around("execution(* eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.search(..))")
+	public Object logTimeDsSearch(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, dsSearch.startTimer());
 	}
 
+	private static final Gauge dsSearchBaseUrls = Gauge.build()
+			.name("DSM_searchBaseUrls_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method DatasourcesApiController.searchBaseUrls()")
+			.register();
 
+	@Around("execution(* eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.searchBaseUrls(..))")
+	public Object logTimeDsSearchBaseUrl(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, dsSearchBaseUrls.startTimer());
+	}
+
+	private static final Gauge apiGetById = Gauge.build()
+			.name("DSM_getApi_requests_latency_seconds")
+			.help("Request latency in seconds for invocations of the method DatasourcesApiController.getApis()")
+			.register();
+
+	@Around("execution(* eu.dnetlib.openaire.exporter.datasource.DatasourcesApiController.getApi(..))")
+	public Object logTimeApiGetById(final ProceedingJoinPoint joinPoint) throws Throwable {
+		return _measure(joinPoint, apiGetById.startTimer());
+	}
+
 }
Index: modules/dnet-openaire-exporter/trunk/pom.xml
===================================================================
--- modules/dnet-openaire-exporter/trunk/pom.xml	(revision 50894)
+++ modules/dnet-openaire-exporter/trunk/pom.xml	(revision 50895)
@@ -368,7 +368,7 @@
 		<dependency>
 			<groupId>net.bull.javamelody</groupId>
 			<artifactId>javamelody-spring-boot-starter</artifactId>
-			<version>1.71.0</version>
+			<version>${javamelody.version}</version>
 		</dependency>
 
 		<dependency>
@@ -420,7 +420,8 @@
 		<apache.solr.version>7.1.0</apache.solr.version>
 		<mongodb.driver.version>3.4.2</mongodb.driver.version>
 		<springfox-version>2.7.0</springfox-version>
-		<prometheus.version>0.0.25</prometheus.version>
+		<prometheus.version>0.2.0</prometheus.version>
+		<javamelody.version>1.71.0</javamelody.version>
 		<maven.javadoc.failOnError>false</maven.javadoc.failOnError>
 		<dockerfile-maven-version>1.3.6</dockerfile-maven-version>
 	</properties>
