107 lines
5.5 KiB
Java
107 lines
5.5 KiB
Java
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<String, Gauge> 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()},
|
|
{"draftDMPs", Gauge.build("draft_dmps", "Number of draft DMPs").register()},
|
|
{"finalizedDMPs", Gauge.build("finalized_dmps", "Number of finalized DMPs").register()},
|
|
{"publishedDMPs", Gauge.build("published_dmps", "Number of published DMPs").register()},
|
|
{"doiedDMPs", Gauge.build("doied_dmps", "Number of DMPs with DOI").register()},
|
|
{"draftDatasets", Gauge.build("draft_datasets", "Number of draft Datasets").register()},
|
|
{"finalizedDatasets", Gauge.build("finalized_datasets", "Number of finalized Datasets").register()},
|
|
{"publishedDatasets", Gauge.build("published_datasets", "Number of published Datasets").register()},
|
|
{"doiedDatasets", Gauge.build("doied_datasets", "Number of Datasets with DOI").register()},
|
|
{"researchers", Gauge.build("researchers", "Number of Colaborators/Researchers").register()},
|
|
{"totalTemplates", Gauge.build("total_templates", "Number of total Templates").register()},
|
|
{"activeTemplates", Gauge.build("active_templates", "Number of active Templates").register()},
|
|
{"usedTemplates", Gauge.build("used_templates", "Number of used Templates").register()},
|
|
{"languages", Gauge.build("languages", "Number of Languages").register()},
|
|
{"totalUsers", Gauge.build("total_users", "Total Number of Users").register()}
|
|
}).collect(Collectors.toMap(data -> (String)data[0], data -> (Gauge) data[1]));
|
|
|
|
public static void increaseValue(String name, int amount) {
|
|
gauges.get(name).inc(amount);
|
|
}
|
|
|
|
public static void decreaseValue(String name, int amount) {
|
|
gauges.get(name).dec(amount);
|
|
}
|
|
|
|
public static Integer getValue(String name) {
|
|
return Double.valueOf(gauges.get(name).get()).intValue();
|
|
}
|
|
|
|
public static void calculateValue(String name, int amount) {
|
|
Integer orig = getValue(name);
|
|
int diff = orig - amount;
|
|
if (diff != 0) {
|
|
if (diff > 0) {
|
|
decreaseValue(name, diff);
|
|
} else {
|
|
increaseValue(name, Math.abs(diff));
|
|
}
|
|
}
|
|
}
|
|
|
|
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, UserManager userManager, Environment environment) {
|
|
this.datasetManager = datasetManager;
|
|
this.dataManagementPlanManager = dataManagementPlanManager;
|
|
this.datasetProfileManager = datasetProfileManager;
|
|
this.userManager = userManager;
|
|
this.environment = environment;
|
|
}
|
|
|
|
@PostConstruct
|
|
@Transactional
|
|
@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.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());
|
|
calculateValue("totalUsers", userManager.countAllUsers().intValue());
|
|
long files = Files.list(Paths.get(this.environment.getProperty("userguide.path"))).count();
|
|
calculateValue("languages", (int) files);
|
|
logger.info("Metrics calculation Completed");
|
|
}
|
|
|
|
}
|