diff options
Diffstat (limited to 'pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/StatisticFrontend.java')
-rw-r--r-- | pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/StatisticFrontend.java | 111 |
1 files changed, 111 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); + } + } + +} |