aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-02-23 11:27:59 +0100
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-02-23 11:27:59 +0100
commit4973b940cc8ce0885653ed7c0223cbedd3dde3bc (patch)
treed711ed5b272631c9a24cd346a19e2c0b6426f83e /pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats
parentfee3c9a59945a2ee74029dfe63c074c753a51dbf (diff)
downloadpdf-as-4-4973b940cc8ce0885653ed7c0223cbedd3dde3bc.tar.gz
pdf-as-4-4973b940cc8ce0885653ed7c0223cbedd3dde3bc.tar.bz2
pdf-as-4-4973b940cc8ce0885653ed7c0223cbedd3dde3bc.zip
added Statistics Facilities to PDF-AS Web
Diffstat (limited to 'pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats')
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/StatisticFrontend.java111
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticFileBackend.java56
2 files changed, 167 insertions, 0 deletions
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/StatisticFrontend.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/StatisticFrontend.java
new file mode 100644
index 00000000..3c59a7cc
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/StatisticFrontend.java
@@ -0,0 +1,111 @@
+package at.gv.egiz.pdfas.web.stats;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ServiceLoader;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.egiz.pdfas.web.config.WebConfiguration;
+
+public class StatisticFrontend implements StatisticBackend {
+
+ private static StatisticFrontend _instance;
+
+ private static ServiceLoader<StatisticBackend> backendLoader = ServiceLoader
+ .load(StatisticBackend.class);
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(StatisticFrontend.class);
+
+ private List<StatisticBackend> statisticBackends = new ArrayList<StatisticBackend>();
+
+ private StatisticFrontend() {
+ Iterator<StatisticBackend> statisticIterator = backendLoader.iterator();
+ List<String> enabledBackends = WebConfiguration.getStatisticBackends();
+
+ if (enabledBackends == null) {
+ logger.info("No statitistic backends configured using all available.");
+ } else {
+ Iterator<String> enabledBackendsIterator = enabledBackends
+ .iterator();
+ logger.info("Allowing the following statistic backends:");
+ while (enabledBackendsIterator.hasNext()) {
+ logger.info(" - {}", enabledBackendsIterator.next());
+ }
+ }
+
+ while (statisticIterator.hasNext()) {
+ StatisticBackend statisticBackend = statisticIterator.next();
+
+ if(enabledBackends == null || enabledBackends.contains(statisticBackend
+ .getName())) {
+ logger.info("adding Statistic Logger {} [{}]", statisticBackend
+ .getName(), statisticBackend.getClass().getName());
+
+ statisticBackends.add(statisticBackend);
+ } else {
+ logger.info("skipping Statistic Logger {} [{}]", statisticBackend
+ .getName(), statisticBackend.getClass().getName());
+ }
+ }
+
+
+ Iterator<String> enabledBackendsIterator = enabledBackends
+ .iterator();
+ while (enabledBackendsIterator.hasNext()) {
+ String enabledBackend = enabledBackendsIterator.next();
+ statisticIterator = statisticBackends.iterator();
+ boolean found = false;
+ while (statisticIterator.hasNext()) {
+ StatisticBackend statisticBackend = statisticIterator.next();
+ if(statisticBackend.getName().equals(enabledBackend)) {
+ found = true;
+ break;
+ }
+ }
+
+ if(!found) {
+ logger.warn("Failed to load statistic backend {}. Not in classpath?", enabledBackend);
+ }
+ }
+ }
+
+ public static StatisticFrontend getInstance() {
+ if (_instance == null) {
+ _instance = new StatisticFrontend();
+ }
+ return _instance;
+ }
+
+
+ @Override
+ public String getName() {
+ return StatisticFrontend.class.getSimpleName();
+ }
+
+
+ @Override
+ public void storeEvent(StatisticEvent statisticEvent) {
+
+ if(statisticEvent == null) {
+ logger.warn("Tried to log null as statisticEvent!");
+ return;
+ }
+
+ if(statisticEvent.isLogged()) {
+ logger.warn("Tried to relog statisticEvent!");
+ return;
+ }
+
+ Iterator<StatisticBackend> statisticBackendIterator = statisticBackends.iterator();
+
+ while(statisticBackendIterator.hasNext()) {
+ StatisticBackend statisticBackend = statisticBackendIterator.next();
+ statisticBackend.storeEvent(statisticEvent);
+ }
+ }
+
+}
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticFileBackend.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticFileBackend.java
new file mode 100644
index 00000000..531c47bf
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticFileBackend.java
@@ -0,0 +1,56 @@
+package at.gv.egiz.pdfas.web.stats.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.egiz.pdfas.web.stats.StatisticBackend;
+import at.gv.egiz.pdfas.web.stats.StatisticEvent;
+
+public class StatisticFileBackend implements StatisticBackend {
+
+ public static final String NAME = "StatisticFileBackend";
+
+ public static final String STATISTIC_LOGGER = "at.gv.egiz.pdfas.web.statistics";
+
+ private static final Logger technical_logger = LoggerFactory
+ .getLogger(StatisticFileBackend.class);
+ private static final Logger statistic_logger = LoggerFactory
+ .getLogger(STATISTIC_LOGGER);
+
+ private void addCSVValue(String value, StringBuilder sb) {
+ if (value != null) {
+ value = value.replace(';', ',');
+ sb.append(value);
+ }
+ sb.append(";");
+ }
+
+ private String getLogEntry(StatisticEvent statisticEvent) {
+ StringBuilder sb = new StringBuilder();
+ addCSVValue(String.valueOf(statisticEvent.getTimestamp()), sb);
+ addCSVValue(statisticEvent.getOperation().getName(), sb);
+ addCSVValue(statisticEvent.getDevice(), sb);
+ addCSVValue(statisticEvent.getProfileId(), sb);
+ addCSVValue(String.valueOf(statisticEvent.getFilesize()), sb);
+ addCSVValue(statisticEvent.getUserAgent(), sb);
+ addCSVValue(statisticEvent.getStatus().getName(), sb);
+ addCSVValue((statisticEvent.getException() != null) ? statisticEvent
+ .getException().getMessage() : null, sb);
+ addCSVValue(String.valueOf(statisticEvent.getErrorCode()), sb);
+ addCSVValue(String.valueOf(statisticEvent.getDuration()), sb);
+ return sb.toString();
+ }
+
+ @Override
+ public void storeEvent(StatisticEvent statisticEvent) {
+ String entry = getLogEntry(statisticEvent);
+ technical_logger.trace("Stat log entry: {}", entry);
+ statistic_logger.info("{}", entry);
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+}