package dk.thoerup.traininfoservice; import java.util.Timer; import java.util.TimerTask; import java.util.logging.Logger; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class StatisticsListener implements ServletContextListener { Logger log = Logger.getLogger(StatisticsListener.class.getName()); Timer timer = null; int update_interval; public void contextInitialized(ServletContextEvent sce) { TraininfoSettings settings = SettingsListener.loadSettings(sce.getServletContext()); update_interval = settings.getStatsInterval(); if (! sce.getServletContext().getRealPath("/").startsWith("/home/app/") ) { //if path not starts with /home/app then it is not running on a production server and we only collects stats on prod servers log.info("This is not a prod. server, dont start Statistics saver"); return; } if ( update_interval > 0 ) { log.info("Statistics saver started with update_interval=" + update_interval); timer = new Timer(); TimerTask statsUpdate = new TimerTask() { @Override public void run() { Statistics.getInstance().saveStats(); } }; timer.schedule(statsUpdate, 0, update_interval); } else { log.info("Statistics saver disabled (update_interval == 0) "); } } public void contextDestroyed(ServletContextEvent sce) { log.info("StatisticsListener::contextDestroyed"); if ( timer != null ) { timer.cancel(); Statistics.getInstance().saveStats(); } } }