diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java index 4d7b82895..6b8de9a48 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java @@ -21,6 +21,7 @@ public class DataManagementPlanCriteria extends Criteria { private boolean isPublic; private boolean onlyPublic; private Short grantStatus; + private boolean hasDoi; public Date getPeriodStart() { return periodStart; @@ -114,4 +115,12 @@ public class DataManagementPlanCriteria extends Criteria { public void setGrantStatus(Short grantStatus) { this.grantStatus = grantStatus; } + + public boolean hasDoi() { + return hasDoi; + } + + public void setHasDoi(boolean hasDoi) { + this.hasDoi = hasDoi; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java index acbfe8422..d730d0127 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java @@ -25,6 +25,7 @@ public class DatasetCriteria extends Criteria { private List groupIds; private Boolean isPublic; private Short grantStatus; + private boolean hasDoi; public boolean getAllVersions() { return allVersions; @@ -132,4 +133,12 @@ public class DatasetCriteria extends Criteria { public void setGrantStatus(Short grantStatus) { this.grantStatus = grantStatus; } + + public boolean hasDoi() { + return hasDoi; + } + + public void setHasDoi(boolean hasDoi) { + this.hasDoi = hasDoi; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java index 32c687d9c..378112713 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java @@ -84,6 +84,10 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao { builder.or(builder.greaterThan(root.get("grant").get("enddate"), new Date()) , builder.isNull(root.get("grant").get("enddate")))); } + + if (criteria.hasDoi()) { + query.where((builder, root) -> builder.not(builder.isNull(root.get("doi")))); + } query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue())); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index f6b8d5b7f..3c5b3d3bc 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -78,6 +78,10 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa query.where((builder, root) -> root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators())); if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty()) query.where((builder, root) -> root.get("profile").get("id").in(criteria.getDatasetTemplates())); + + if (criteria.hasDoi()) { + query.where((builder, root) -> builder.not(builder.isNull(root.get("dmp").get("doi")))); + } query.where((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.DELETED.getValue())); query.where((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.CANCELED.getValue())); return query; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 75da09e2b..eea3b6cb3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -2078,6 +2078,12 @@ public class DataManagementPlanManager { return apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria).count(); } + public long countAllDoied() { + DataManagementPlanCriteria criteria = new DataManagementPlanCriteria(); + criteria.setHasDoi(true); + return apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria).count(); + } + public long countAllResearchers() { ResearcherCriteria criteria = new ResearcherCriteria(); return apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao().getWithCriteria(criteria).count(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index c6d10f2a9..ebce6f37b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -1089,4 +1089,10 @@ public class DatasetManager { criteria.setIsPublic(true); return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(criteria).count(); } + + public long countAllWithDoi() { + eu.eudat.data.dao.criteria.DatasetCriteria criteria = new eu.eudat.data.dao.criteria.DatasetCriteria(); + criteria.setHasDoi(true); + return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(criteria).count(); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java index 25e696f79..34e9077bc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java @@ -1,17 +1,25 @@ package eu.eudat.logic.managers; import io.prometheus.client.Gauge; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.transaction.Transactional; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @Component public class MetricsManager { + private final static Logger logger = LoggerFactory.getLogger(MetricsManager.class); private static Map gauges = Stream.of( new Object[][]{ {"usersLoggedIn", Gauge.build("users_logged_in", "Number of current logged in users").register()}, {"projects", Gauge.build("projects", "Number of registered Projects").register()}, @@ -57,28 +65,40 @@ public class MetricsManager { private final DatasetManager datasetManager; private final DataManagementPlanManager dataManagementPlanManager; private final DatasetProfileManager datasetProfileManager; + private final UserManager userManager; + private final Environment environment; @Autowired - public MetricsManager(DatasetManager datasetManager, DataManagementPlanManager dataManagementPlanManager, DatasetProfileManager datasetProfileManager) { + public MetricsManager(DatasetManager datasetManager, DataManagementPlanManager dataManagementPlanManager, DatasetProfileManager datasetProfileManager, UserManager userManager, Environment environment) { this.datasetManager = datasetManager; this.dataManagementPlanManager = dataManagementPlanManager; this.datasetProfileManager = datasetProfileManager; + this.userManager = userManager; + this.environment = environment; } @PostConstruct @Transactional - public void init() { + @Scheduled(initialDelay = 1000 * 60 * 60, fixedDelay = 1000 * 60 * 60) + public void init() throws IOException { + logger.info("Start calculating Metrics"); calculateValue("draftDMPs", (int) dataManagementPlanManager.countAllDrafts()); calculateValue("finalizedDMPs", (int) dataManagementPlanManager.countAllFinalized()); - calculateValue("publishedDMPs", (int) dataManagementPlanManager.countAllFinalized()); + calculateValue("publishedDMPs", (int) dataManagementPlanManager.countAllPublished()); + calculateValue("doiedDMPs", (int) dataManagementPlanManager.countAllDoied()); calculateValue("projects", (int) dataManagementPlanManager.countAllProjects()); calculateValue("researchers", (int) dataManagementPlanManager.countAllResearchers()); calculateValue("draftDatasets", (int) datasetManager.countAllDraft()); calculateValue("finalizedDatasets", (int) datasetManager.countAllFinalized()); calculateValue("publishedDatasets", (int) datasetManager.countAllPublic()); + calculateValue("doiedDatasets", (int) datasetManager.countAllWithDoi()); calculateValue("totalTemplates", (int) datasetProfileManager.countAlldraft()); calculateValue("activeTemplates", (int) datasetProfileManager.countAllFinalized()); calculateValue("usedTemplates", (int) datasetProfileManager.countAllUsed()); + calculateValue("usersLoggedIn", userManager.countActiveUsers().intValue()); + long files = Files.list(Paths.get(this.environment.getProperty("userguide.path"))).count(); + calculateValue("languages", (int) files); + logger.info("Metrics calculation Completed"); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java index 81fc2d8ee..96c894137 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java @@ -244,5 +244,9 @@ public class UserManager { UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle(); return new UserProfile().fromDataModel(user); } + + public Long countActiveUsers(){ + return apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().asQueryable().where(((builder, root) -> builder.greaterThan(root.get("expiresAt"), new Date()))).count(); + } }