Ejemplo n.º 1
0
        public Statsd(StatsdnetConfiguration config)
            : this(config.Name)
        {
            _log.Info("statsd.net loading config.");
            var systemMetrics = TinyIoCContainer.Current.Resolve <ISystemMetricsService>();

            systemMetrics.HideSystemStats = config.HideSystemStats;

            LoadBackends(config, systemMetrics);

            // Load Aggregators
            var intervalServices = new List <IIntervalService>();
            var intervalService  = new IntervalService(config.FlushInterval,
                                                       _tokenSource.Token);

            intervalServices.Add(intervalService);
            LoadAggregators(config,
                            intervalService,
                            _messageBroadcaster,
                            systemMetrics);
            // Load Listeners
            LoadListeners(config, _tokenSource.Token, systemMetrics);

            // Now start the interval service
            intervalServices.ForEach(p => p.Start());

            // Announce that we've started
            systemMetrics.LogCount("started");
        }
Ejemplo n.º 2
0
 private void LoadBackends(StatsdnetConfiguration config, ISystemMetricsService systemMetrics)
 {
     foreach (var backend in config.GetConfiguredBackends(systemMetrics))
     {
         AddBackend(backend, systemMetrics, backend.Name);
     }
 }
Ejemplo n.º 3
0
 private void LoadListeners(StatsdnetConfiguration config, ISystemMetricsService systemMetrics)
 {
     // Load listeners - done last and once the rest of the chain is in place
     foreach (var listenerConfig in config.Listeners)
     {
         if (listenerConfig is UDPListenerConfiguration)
         {
             var udpConfig = listenerConfig as UDPListenerConfiguration;
             AddListener(new UdpStatsListener(udpConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.udp." + udpConfig.Port);
         }
         else if (listenerConfig is TCPListenerConfiguration)
         {
             var tcpConfig = listenerConfig as TCPListenerConfiguration;
             AddListener(new TcpStatsListener(tcpConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.tcp." + tcpConfig.Port);
         }
         else if (listenerConfig is HTTPListenerConfiguration)
         {
             var httpConfig = listenerConfig as HTTPListenerConfiguration;
             AddListener(new HttpStatsListener(httpConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.http." + httpConfig.Port);
         }
         else if (listenerConfig is StatsdnetListenerConfiguration)
         {
             var statsdnetConfig = listenerConfig as StatsdnetListenerConfiguration;
             AddListener(new StatsdnetTcpListener(statsdnetConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.statsdnet." + statsdnetConfig.Port);
         }
     }
 }
Ejemplo n.º 4
0
        protected override void OnStop()
        {
            if (_statsd != null)
            {
                _statsd.Stop();
                _statsd.ShutdownWaitHandle.WaitOne();
            }

            if (_config != null)
            {
                _config.Dispose();
                _config = null;
            }
        }
Ejemplo n.º 5
0
        public bool Stop(HostControl host)
        {
            if (_statsd != null)
            {
                _statsd.Stop();
                _statsd.ShutdownWaitHandle.WaitOne();
            }

            if (_config != null)
            {
                _config.Dispose();
                _config = null;
            }

            return(true);
        }
Ejemplo n.º 6
0
        public void Start(bool waitForCompletion = true)
        {
            //TODO : JV IS CONFIG FILE A ACTUAL FILE PATH?  IF SO THEN ITS MISLEADING SHOULD BE CONFIGFILEPATH??
            LoggingBootstrap.Configure();

            var configFile = ResolveConfigFile(_configFile);

            if (!File.Exists(configFile))
            {
                throw new FileNotFoundException("Could not find the statsd.net config file. I looked here: " + configFile);
            }
            _config = ConfigurationFactory.Parse(configFile);
            _statsd = new Statsd(_config);
            if (waitForCompletion)
            {
                _statsd.ShutdownWaitHandle.WaitOne();
            }
        }
Ejemplo n.º 7
0
 private void LoadListeners(StatsdnetConfiguration config,
                            CancellationToken cancellationToken,
                            ISystemMetricsService systemMetrics)
 {
     // Load listeners - done last and once the rest of the chain is in place
     foreach (var listenerConfig in config.Listeners)
     {
         if (listenerConfig is UDPListenerConfiguration)
         {
             var udpConfig = listenerConfig as UDPListenerConfiguration;
             AddListener(new UdpStatsListener(udpConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.udp." + udpConfig.Port);
         }
         else if (listenerConfig is TCPListenerConfiguration)
         {
             var tcpConfig = listenerConfig as TCPListenerConfiguration;
             AddListener(new TcpStatsListener(tcpConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.tcp." + tcpConfig.Port);
         }
         else if (listenerConfig is HTTPListenerConfiguration)
         {
             var httpConfig = listenerConfig as HTTPListenerConfiguration;
             AddListener(new HttpStatsListener(httpConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.http." + httpConfig.Port);
         }
         else if (listenerConfig is StatsdnetListenerConfiguration)
         {
             var statsdnetConfig = listenerConfig as StatsdnetListenerConfiguration;
             AddListener(new StatsdnetTcpListener(statsdnetConfig.Port, systemMetrics));
             systemMetrics.LogCount("startup.listener.statsdnet." + statsdnetConfig.Port);
         }
         else if (listenerConfig is MSSQLRelayListenerConfiguration)
         {
             var mssqlRelayConfig = listenerConfig as MSSQLRelayListenerConfiguration;
             AddListener(new MSSQLRelayListener(mssqlRelayConfig.ConnectionString,
                                                mssqlRelayConfig.PollInterval,
                                                cancellationToken,
                                                mssqlRelayConfig.BatchSize,
                                                mssqlRelayConfig.DeleteAfterSend,
                                                systemMetrics));
         }
     }
 }
Ejemplo n.º 8
0
        private void LoadAggregators(StatsdnetConfiguration config,
                                     IntervalService intervalService,
                                     BroadcastBlock <Bucket> messageBroadcaster,
                                     ISystemMetricsService systemMetrics)
        {
            foreach (var aggregator in config.Aggregators)
            {
                switch (aggregator.Key)
                {
                case "counters":
                    var counter = aggregator.Value as CounterAggregationConfig;
                    AddAggregator(MessageType.Counter,
                                  TimedCounterAggregatorBlockFactory.CreateBlock(messageBroadcaster,
                                                                                 counter.Namespace,
                                                                                 intervalService),
                                  systemMetrics);
                    break;

                case "gauges":
                    var gauge = aggregator.Value as GaugeAggregatorConfig;
                    AddAggregator(MessageType.Gauge,
                                  TimedGaugeAggregatorBlockFactory.CreateBlock(messageBroadcaster,
                                                                               gauge.Namespace,
                                                                               gauge.RemoveZeroGauges,
                                                                               intervalService),
                                  systemMetrics);
                    break;

                case "calendargrams":
                    var calendargram = aggregator.Value as CalendargramAggregationConfig;
                    AddAggregator(MessageType.Calendargram,
                                  TimedCalendargramAggregatorBlockFactory.CreateBlock(messageBroadcaster,
                                                                                      calendargram.Namespace,
                                                                                      intervalService,
                                                                                      new TimeWindowService()),
                                  systemMetrics);
                    break;

                case "timers":
                    var timer = aggregator.Value as TimersAggregationConfig;
                    AddAggregator(MessageType.Timing,
                                  TimedLatencyAggregatorBlockFactory.CreateBlock(messageBroadcaster,
                                                                                 timer.Namespace,
                                                                                 intervalService,
                                                                                 timer.CalculateSumSquares),
                                  systemMetrics);
                    // Add Percentiles
                    foreach (var percentile in timer.Percentiles)
                    {
                        AddAggregator(MessageType.Timing,
                                      TimedLatencyPercentileAggregatorBlockFactory.CreateBlock(messageBroadcaster,
                                                                                               timer.Namespace,
                                                                                               intervalService,
                                                                                               percentile.Threshold,
                                                                                               percentile.Name),
                                      systemMetrics);
                    }
                    break;
                }
            }
            // Add the Raw (pass-through) aggregator
            AddAggregator(MessageType.Raw,
                          PassThroughBlockFactory.CreateBlock(messageBroadcaster, intervalService),
                          systemMetrics);
        }