diff options
author | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-02-23 11:27:59 +0100 |
---|---|---|
committer | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-02-23 11:27:59 +0100 |
commit | 4973b940cc8ce0885653ed7c0223cbedd3dde3bc (patch) | |
tree | d711ed5b272631c9a24cd346a19e2c0b6426f83e /pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats | |
parent | fee3c9a59945a2ee74029dfe63c074c753a51dbf (diff) | |
download | pdf-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.java | 111 | ||||
-rw-r--r-- | pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticFileBackend.java | 56 |
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; + } + +} |