001    package com.khubla.pragmatach.plugin.statsd;
002    
003    import org.slf4j.Logger;
004    import org.slf4j.LoggerFactory;
005    
006    import com.khubla.pragmatach.framework.api.Request;
007    import com.khubla.pragmatach.framework.application.Application;
008    import com.khubla.pragmatach.framework.lifecycle.LifecycleListener;
009    import com.khubla.pragmatach.framework.router.PragmatachRoute;
010    import com.timgroup.statsd.NonBlockingStatsDClient;
011    import com.timgroup.statsd.StatsDClient;
012    
013    /**
014     * @author tome
015     */
016    public class StatsDClientImplementation implements LifecycleListener {
017       /**
018        * logger
019        */
020       private final Logger logger = LoggerFactory.getLogger(this.getClass());
021       /**
022        * the client
023        */
024       private static final StatsDClient statsDClient = getStatsDClient();
025    
026       public static StatsDClient getStatsdclient() {
027          return statsDClient;
028       }
029    
030       /**
031        * get the client
032        */
033       private static StatsDClient getStatsDClient() {
034          try {
035             final String prefix = Application.getConfiguration().getParameter("statsd.prefix");
036             final String host = Application.getConfiguration().getParameter("statsd.host");
037             final String port = Application.getConfiguration().getParameter("statsd.port");
038             if ((null != prefix) && (null != host) && (null != port)) {
039                return new NonBlockingStatsDClient(prefix, host, Integer.parseInt(port));
040             } else {
041                return null;
042             }
043          } catch (final Exception e) {
044             throw new ExceptionInInitializerError(e);
045          }
046       }
047    
048       @Override
049       public void beginRequest(PragmatachRoute pragmatachRoute, Request request) {
050          if (null != statsDClient) {
051             /*
052              * request count
053              */
054             statsDClient.incrementCounter("TotalRequests");
055          } else {
056             logger.info("started: " + request.getMethod() + " request for: " + request.getURI() + " routed to " + pragmatachRoute.getDescription());
057          }
058       }
059    
060       @Override
061       public void endRequest(PragmatachRoute pragmatachRoute, Request request) {
062          if (null != statsDClient) {
063          } else {
064             logger.info("completed: " + request.getMethod() + " request for: " + request.getURI() + " routed to " + pragmatachRoute.getDescription());
065          }
066       }
067    }