--- android/TrainInfoService/src/dk/thoerup/traininfoservice/CircuitBreakerListener.java 2010/07/05 09:49:53 959 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/CircuitBreakerListener.java 2011/10/04 17:35:31 1607 @@ -4,12 +4,16 @@ import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; +import javax.servlet.ServletRegistration; import javax.servlet.annotation.WebListener; import dk.thoerup.circuitbreaker.AccountingCircuitBreaker; import dk.thoerup.circuitbreaker.CircuitBreakerManager; -import dk.thoerup.circuitbreaker.jmx.JMXWrapper; +import dk.thoerup.circuitbreaker.LoggingCircuitBreaker; +import dk.thoerup.circuitbreaker.notification.CompositeNotifier; import dk.thoerup.circuitbreaker.notification.JavaLogNotifier; +import dk.thoerup.circuitbreaker.notification.MailNotifier; + /** * Application Lifecycle Listener implementation class JmxListener @@ -29,15 +33,37 @@ public void contextInitialized(ServletContextEvent sce) { logger.warning("Context Init"); - int threshold = Integer.parseInt(sce.getServletContext().getInitParameter("banedk_threshold") ); - int timeout = Integer.parseInt( sce.getServletContext().getInitParameter("banedk_timeout") ); + TraininfoSettings settings = SettingsListener.loadSettings( sce.getServletContext() ); + CircuitBreakerManager mgr = CircuitBreakerManager.getManager(); - AccountingCircuitBreaker banedk = new AccountingCircuitBreaker("banedk", threshold, timeout); - banedk.setNotifier( new JavaLogNotifier() ); - mgr.addCircuitBreaker( banedk ); + CompositeNotifier notif = new CompositeNotifier(); + notif.addNotifier( new JavaLogNotifier() ); + + //only send mail on prod server + if (sce.getServletContext().getRealPath("/").startsWith("/home/app/") ) { + String mailRecipient = settings.getMailRecipient(); + + if (mailRecipient != null && (!mailRecipient.isEmpty() ) ) { + notif.addNotifier( new MailNotifier("traininfo@t-hoerup.dk", mailRecipient, "192.168.10.5") ); + } + } + + LoggingCircuitBreaker banedk = new LoggingCircuitBreaker("banedk", settings); + banedk.setNotifier(notif); + mgr.addCircuitBreaker( banedk ); + + + AccountingCircuitBreaker metro = new AccountingCircuitBreaker("metro", settings); + metro.setNotifier(notif); + mgr.addCircuitBreaker( metro ); + + + ServletRegistration.Dynamic dynconf = sce.getServletContext().addServlet("circuitbreaker", dk.thoerup.circuitbreaker.web.CircuitBreakerServletBase.class ); + dynconf.addMapping("/CircuitBreakerServlet"); + dynconf.setInitParameter("readonly", "0"); - JMXWrapper.registerAllCircuitBreakers(); + //JMXWrapper.registerAllCircuitBreakers(); } /** @@ -45,9 +71,9 @@ */ public void contextDestroyed(ServletContextEvent sce) { logger.warning("Context Destroyed"); - CircuitBreakerManager.getManager().removeCircuitBreaker("banedk"); + CircuitBreakerManager.getManager().shutdown(); - JMXWrapper.unregisterAllCircuitBreakers(); + //JMXWrapper.unregisterAllCircuitBreakers(); } }