Add missing metrics counters and made the metrics init task scheduled (per Hour) (ref #294)

This commit is contained in:
George Kalampokis 2021-04-12 12:00:07 +03:00
parent 27bf69268e
commit c27ff1d446
8 changed files with 65 additions and 3 deletions

View File

@ -21,6 +21,7 @@ public class DataManagementPlanCriteria extends Criteria<DMP> {
private boolean isPublic; private boolean isPublic;
private boolean onlyPublic; private boolean onlyPublic;
private Short grantStatus; private Short grantStatus;
private boolean hasDoi;
public Date getPeriodStart() { public Date getPeriodStart() {
return periodStart; return periodStart;
@ -114,4 +115,12 @@ public class DataManagementPlanCriteria extends Criteria<DMP> {
public void setGrantStatus(Short grantStatus) { public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus; this.grantStatus = grantStatus;
} }
public boolean hasDoi() {
return hasDoi;
}
public void setHasDoi(boolean hasDoi) {
this.hasDoi = hasDoi;
}
} }

View File

@ -25,6 +25,7 @@ public class DatasetCriteria extends Criteria<Dataset> {
private List<UUID> groupIds; private List<UUID> groupIds;
private Boolean isPublic; private Boolean isPublic;
private Short grantStatus; private Short grantStatus;
private boolean hasDoi;
public boolean getAllVersions() { public boolean getAllVersions() {
return allVersions; return allVersions;
@ -132,4 +133,12 @@ public class DatasetCriteria extends Criteria<Dataset> {
public void setGrantStatus(Short grantStatus) { public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus; this.grantStatus = grantStatus;
} }
public boolean hasDoi() {
return hasDoi;
}
public void setHasDoi(boolean hasDoi) {
this.hasDoi = hasDoi;
}
} }

View File

@ -84,6 +84,10 @@ public class DMPDaoImpl extends DatabaseAccess<DMP> implements DMPDao {
builder.or(builder.greaterThan(root.get("grant").get("enddate"), new Date()) builder.or(builder.greaterThan(root.get("grant").get("enddate"), new Date())
, builder.isNull(root.get("grant").get("enddate")))); , 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())); query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue()));
return query; return query;
} }

View File

@ -78,6 +78,10 @@ public class DatasetDaoImpl extends DatabaseAccess<Dataset> implements DatasetDa
query.where((builder, root) -> root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators())); 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()) if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty())
query.where((builder, root) -> root.get("profile").get("id").in(criteria.getDatasetTemplates())); 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.DELETED.getValue()));
query.where((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.CANCELED.getValue())); query.where((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.CANCELED.getValue()));
return query; return query;

View File

@ -2078,6 +2078,12 @@ public class DataManagementPlanManager {
return apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria).count(); 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() { public long countAllResearchers() {
ResearcherCriteria criteria = new ResearcherCriteria(); ResearcherCriteria criteria = new ResearcherCriteria();
return apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao().getWithCriteria(criteria).count(); return apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao().getWithCriteria(criteria).count();

View File

@ -1089,4 +1089,10 @@ public class DatasetManager {
criteria.setIsPublic(true); criteria.setIsPublic(true);
return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(criteria).count(); 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();
}
} }

View File

@ -1,17 +1,25 @@
package eu.eudat.logic.managers; package eu.eudat.logic.managers;
import io.prometheus.client.Gauge; import io.prometheus.client.Gauge;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; 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 org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.transaction.Transactional; 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.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@Component @Component
public class MetricsManager { public class MetricsManager {
private final static Logger logger = LoggerFactory.getLogger(MetricsManager.class);
private static Map<String, Gauge> gauges = Stream.of( new Object[][]{ private static Map<String, Gauge> gauges = Stream.of( new Object[][]{
{"usersLoggedIn", Gauge.build("users_logged_in", "Number of current logged in users").register()}, {"usersLoggedIn", Gauge.build("users_logged_in", "Number of current logged in users").register()},
{"projects", Gauge.build("projects", "Number of registered Projects").register()}, {"projects", Gauge.build("projects", "Number of registered Projects").register()},
@ -57,28 +65,40 @@ public class MetricsManager {
private final DatasetManager datasetManager; private final DatasetManager datasetManager;
private final DataManagementPlanManager dataManagementPlanManager; private final DataManagementPlanManager dataManagementPlanManager;
private final DatasetProfileManager datasetProfileManager; private final DatasetProfileManager datasetProfileManager;
private final UserManager userManager;
private final Environment environment;
@Autowired @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.datasetManager = datasetManager;
this.dataManagementPlanManager = dataManagementPlanManager; this.dataManagementPlanManager = dataManagementPlanManager;
this.datasetProfileManager = datasetProfileManager; this.datasetProfileManager = datasetProfileManager;
this.userManager = userManager;
this.environment = environment;
} }
@PostConstruct @PostConstruct
@Transactional @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("draftDMPs", (int) dataManagementPlanManager.countAllDrafts());
calculateValue("finalizedDMPs", (int) dataManagementPlanManager.countAllFinalized()); 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("projects", (int) dataManagementPlanManager.countAllProjects());
calculateValue("researchers", (int) dataManagementPlanManager.countAllResearchers()); calculateValue("researchers", (int) dataManagementPlanManager.countAllResearchers());
calculateValue("draftDatasets", (int) datasetManager.countAllDraft()); calculateValue("draftDatasets", (int) datasetManager.countAllDraft());
calculateValue("finalizedDatasets", (int) datasetManager.countAllFinalized()); calculateValue("finalizedDatasets", (int) datasetManager.countAllFinalized());
calculateValue("publishedDatasets", (int) datasetManager.countAllPublic()); calculateValue("publishedDatasets", (int) datasetManager.countAllPublic());
calculateValue("doiedDatasets", (int) datasetManager.countAllWithDoi());
calculateValue("totalTemplates", (int) datasetProfileManager.countAlldraft()); calculateValue("totalTemplates", (int) datasetProfileManager.countAlldraft());
calculateValue("activeTemplates", (int) datasetProfileManager.countAllFinalized()); calculateValue("activeTemplates", (int) datasetProfileManager.countAllFinalized());
calculateValue("usedTemplates", (int) datasetProfileManager.countAllUsed()); 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");
} }
} }

View File

@ -244,5 +244,9 @@ public class UserManager {
UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle(); UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle();
return new UserProfile().fromDataModel(user); 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();
}
} }