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"); }
private void LoadBackends(StatsdnetConfiguration config, ISystemMetricsService systemMetrics) { foreach (var backend in config.GetConfiguredBackends(systemMetrics)) { AddBackend(backend, systemMetrics, backend.Name); } }
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); } } }
protected override void OnStop() { if (_statsd != null) { _statsd.Stop(); _statsd.ShutdownWaitHandle.WaitOne(); } if (_config != null) { _config.Dispose(); _config = null; } }
public bool Stop(HostControl host) { if (_statsd != null) { _statsd.Stop(); _statsd.ShutdownWaitHandle.WaitOne(); } if (_config != null) { _config.Dispose(); _config = null; } return(true); }
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(); } }
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)); } } }
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); }