diff --git a/pom.xml b/pom.xml
index 39cf934..800e1ec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,12 @@
json
20210307
+
+ commons-io
+ commons-io
+ 2.11.0
+
+
diff --git a/src/main/java/eu/dnetlib/dnetexploremetrics/DnetExploreMetricsApplication.java b/src/main/java/eu/dnetlib/dnetexploremetrics/DnetExploreMetricsApplication.java
index 1a6acfe..f1744d7 100644
--- a/src/main/java/eu/dnetlib/dnetexploremetrics/DnetExploreMetricsApplication.java
+++ b/src/main/java/eu/dnetlib/dnetexploremetrics/DnetExploreMetricsApplication.java
@@ -1,7 +1,10 @@
package eu.dnetlib.dnetexploremetrics;
+import eu.dnetlib.dnetexploremetrics.dao.MetricsDAO;
+import eu.dnetlib.dnetexploremetrics.dao.MetricsFileDAO;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class DnetExploreMetricsApplication {
@@ -10,4 +13,9 @@ public class DnetExploreMetricsApplication {
SpringApplication.run(DnetExploreMetricsApplication.class, args);
}
+ @Bean
+ public MetricsDAO metricsDAO() {
+ return new MetricsFileDAO();
+ }
+
}
diff --git a/src/main/java/eu/dnetlib/dnetexploremetrics/controller/MetricsController.java b/src/main/java/eu/dnetlib/dnetexploremetrics/controller/MetricsController.java
new file mode 100644
index 0000000..f5a980b
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dnetexploremetrics/controller/MetricsController.java
@@ -0,0 +1,19 @@
+package eu.dnetlib.dnetexploremetrics.controller;
+
+import eu.dnetlib.dnetexploremetrics.service.MetricsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class MetricsController {
+
+ @Autowired
+ MetricsService metricsService;
+
+ @RequestMapping(value = "/metrics", method = RequestMethod.GET, produces={"text/plain"})
+ public String getMetrics() {
+ return metricsService.getMetrics();
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsDAO.java b/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsDAO.java
index 678ecd7..f69b262 100644
--- a/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsDAO.java
+++ b/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsDAO.java
@@ -8,5 +8,5 @@ public interface MetricsDAO {
public void save(Metrics metrics);
- public List getMetrics();
+ public String getMetrics();
}
diff --git a/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsFileDAO.java b/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsFileDAO.java
index c4ccbed..2ee6b12 100644
--- a/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsFileDAO.java
+++ b/src/main/java/eu/dnetlib/dnetexploremetrics/dao/MetricsFileDAO.java
@@ -2,14 +2,13 @@ package eu.dnetlib.dnetexploremetrics.dao;
import eu.dnetlib.dnetexploremetrics.model.Metrics;
import eu.dnetlib.dnetexploremetrics.utils.PrometheusMetricsFormatter;
+import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import java.io.IOException;
+import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.List;
+
public class MetricsFileDAO implements MetricsDAO {
private final Logger logger = Logger.getLogger(this.getClass());
@@ -20,24 +19,32 @@ public class MetricsFileDAO implements MetricsDAO {
try {
Files.write(Paths.get("fileName"), PrometheusMetricsFormatter.formatMetrics(metrics).getBytes());
+ ClassLoader classLoader = getClass().getClassLoader();
+ File file = new File(classLoader.getResource(".").getFile() +"/metrics.txt");
+
+ FileWriter fileWriter = new FileWriter(file);
+ PrintWriter printWriter = new PrintWriter(fileWriter);
+ printWriter.print(PrometheusMetricsFormatter.formatMetrics(metrics));
+ printWriter.close();
+
} catch (IOException ioe) {
logger.error("Error writing metrics to file " + fileName + ".", ioe);
- System.out.println(ioe);
}
}
@Override
- public List getMetrics() {
- return null;
- }
+ public String getMetrics() {
- public static void main(String[] args) {
+ String metrics="";
+ try {
+ FileInputStream inputStream = new FileInputStream(getClass().getClassLoader().getResource(".").getFile() +"/metrics.txt");
+ metrics = IOUtils.toString(inputStream, "UTF-8");
+ // do something with everything string
+ } catch (IOException ioe) {
+ logger.error("Error reading metrics to file " + fileName + ".", ioe);
+ }
- MetricsFileDAO mfd = new MetricsFileDAO();
- mfd.fileName="/home/katerina/Desktop/test.txt";
- Metrics m = new Metrics();
- m.publications = 1+"";
- mfd.save(m);
+ return metrics;
}
}
diff --git a/src/main/java/eu/dnetlib/dnetexploremetrics/model/Metrics.java b/src/main/java/eu/dnetlib/dnetexploremetrics/model/Metrics.java
index ff0a58d..b941706 100644
--- a/src/main/java/eu/dnetlib/dnetexploremetrics/model/Metrics.java
+++ b/src/main/java/eu/dnetlib/dnetexploremetrics/model/Metrics.java
@@ -23,6 +23,9 @@ public class Metrics {
//Projects (Funded projects)
public String projects;
- //Content Providers TODO: define criteria
+ //Content Providers
public String contentProviders;
+
+ //Organizations
+ public String organizations;
}
diff --git a/src/main/java/eu/dnetlib/dnetexploremetrics/service/MetricsService.java b/src/main/java/eu/dnetlib/dnetexploremetrics/service/MetricsService.java
index f06fc52..b421176 100644
--- a/src/main/java/eu/dnetlib/dnetexploremetrics/service/MetricsService.java
+++ b/src/main/java/eu/dnetlib/dnetexploremetrics/service/MetricsService.java
@@ -1,18 +1,24 @@
package eu.dnetlib.dnetexploremetrics.service;
import com.fasterxml.jackson.databind.util.JSONPObject;
+import eu.dnetlib.dnetexploremetrics.dao.MetricsDAO;
import eu.dnetlib.dnetexploremetrics.dao.MetricsFileDAO;
import eu.dnetlib.dnetexploremetrics.model.Metrics;
import eu.dnetlib.dnetexploremetrics.utils.PrometheusMetricsFormatter;
import org.json.JSONObject;
-import org.springframework.beans.factory.annotation.Value;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
+@EnableScheduling
+@Service
public class MetricsService {
- @Value("${search.service.url}")
- private String searchServiceUrl;
+ @Autowired
+ private MetricsDAO metricsDAO;
private final String recordsRequest = "results?size=0&format=json";
private final String publicationsRequest = "publications?size=0&format=json";
@@ -22,9 +28,17 @@ public class MetricsService {
private final String fundersRequest = "resources2?format=json&refine=true&fields=relfunder&type=results&page=0&size=0";
private final String projectsRequest = "projects?size=0&format=json";
private final String contentProvidersRequest = "datasources?size=0&format=json";
+ private final String organizationsRequest = "resources2?query=((reldatasourcecompatibilityid exact driver or " +
+ "reldatasourcecompatibilityid exact driver-openaire2.0 or reldatasourcecompatibilityid exact openaire2.0 or " +
+ "reldatasourcecompatibilityid exact openaire3.0 or reldatasourcecompatibilityid exact openaire4.0 or " +
+ "reldatasourcecompatibilityid exact openaire-cris_1.1 or reldatasourcecompatibilityid exact openaire2.0_data" +
+ " or reldatasourcecompatibilityid exact hostedBy or relproject=*))&type=organizations&size=0&format=json";
- private void getMetrics(Metrics metrics) {
+ @Scheduled(cron = "0 0 0 * * ?")
+ private void calculateMetrics() {
+ System.out.println("Calculating metrics...");
+ Metrics metrics = new Metrics();
RestTemplate restTemplate = new RestTemplate();
ResponseEntity response
= restTemplate.getForEntity("https://services.openaire.eu/search/v2/api/" + recordsRequest, String.class);
@@ -66,13 +80,19 @@ public class MetricsService {
getForEntity("https://services.openaire.eu/search/v2/api/" + contentProvidersRequest, String.class);
jsonObject = new JSONObject(response.getBody());
metrics.contentProviders = jsonObject.getJSONObject("meta").get("total").toString();
+
+ System.out.println("https://services.openaire.eu/search/v2/api/" + organizationsRequest);
+ response = restTemplate.
+ getForEntity("https://services.openaire.eu/search/v2/api/" + organizationsRequest, String.class);
+
+ jsonObject = new JSONObject(response.getBody());
+ metrics.organizations = jsonObject.getJSONObject("meta").get("total").toString();
+
+ metricsDAO.save(metrics);
}
- public static void main(String[] args) {
- MetricsService ms = new MetricsService();
- Metrics m = new Metrics();
- ms.getMetrics(m);
- PrometheusMetricsFormatter.formatMetrics(m);
+ public String getMetrics() {
+ MetricsDAO metricsDAO = new MetricsFileDAO();
+ return metricsDAO.getMetrics();
}
-
}
diff --git a/src/main/java/eu/dnetlib/dnetexploremetrics/utils/PrometheusMetricsFormatter.java b/src/main/java/eu/dnetlib/dnetexploremetrics/utils/PrometheusMetricsFormatter.java
index f2655ec..1b13abf 100644
--- a/src/main/java/eu/dnetlib/dnetexploremetrics/utils/PrometheusMetricsFormatter.java
+++ b/src/main/java/eu/dnetlib/dnetexploremetrics/utils/PrometheusMetricsFormatter.java
@@ -13,7 +13,8 @@ public class PrometheusMetricsFormatter {
ORP("# TYPE explore_total_otherresearchproducts gauge\nexplore_total_otherresearchproducts %s"),
FUNDERS("# TYPE explore_total_funders gauge\nexplore_total_funders %s"),
PROJECTS("#TYPE explore_total_projects gauge\nexplore_total_projects %s"),
- CONTENT_PROVIDERS("#TYPE explore_total_contentproviders gauge\nexplore_total_contentproviders %s");
+ CONTENT_PROVIDERS("#TYPE explore_total_contentproviders gauge\nexplore_total_contentproviders %s"),
+ ORGANIZATIONS("#TYPE explore_total_organizations gauge \nexplore_total_organizations %s");
private String value;
PrometheusMetrics(String value) {
@@ -33,8 +34,8 @@ public class PrometheusMetricsFormatter {
append(String.format(String.valueOf(PrometheusMetrics.ORP.getValue()), metrics.orp)).append("\n").
append(String.format(String.valueOf(PrometheusMetrics.FUNDERS.getValue()), metrics.funders)).append("\n").
append(String.format(String.valueOf(PrometheusMetrics.PROJECTS.getValue()), metrics.projects)).append("\n").
- append(String.format(String.valueOf(PrometheusMetrics.CONTENT_PROVIDERS.getValue()), metrics.contentProviders));
- System.out.println(builder.toString());
+ append(String.format(String.valueOf(PrometheusMetrics.CONTENT_PROVIDERS.getValue()), metrics.contentProviders)).append("\n").
+ append(String.format(String.valueOf(PrometheusMetrics.ORGANIZATIONS.getValue()),metrics.organizations));
return builder.toString();
}
}