Example #1
0
        public Statsd(string serviceName = null)
        {
            _log.Info("statsd.net starting.");
            _tokenSource      = new CancellationTokenSource();
            _shutdownComplete = new ManualResetEvent(false);

            var systemInfoService = new SystemInfoService();

            var container = TinyIoCContainer.Current;

            container.Register <ISystemInfoService, SystemInfoService>(systemInfoService);


            serviceName = serviceName ?? systemInfoService.HostName;
            var systemMetricsService = new SystemMetricsService("statsdnet", serviceName);

            container.Register <ISystemMetricsService, SystemMetricsService>(systemMetricsService);

            /**
             * The flow is:
             *  Listeners ->
             *    Message Parser ->
             *      router ->
             *        Aggregator ->
             *          Broadcaster ->
             *            Backends
             */

            // Initialise the core blocks
            _router        = new StatsdMessageRouterBlock();
            _messageParser = MessageParserBlockFactory.CreateMessageParserBlock(_tokenSource.Token, container.Resolve <ISystemMetricsService>());
            _messageParser.LinkTo(_router);
            _messageParser.Completion.LogAndContinueWith("MessageParser", () =>
            {
                _log.Info("MessageParser: Completion signaled. Notifying the MessageBroadcaster.");
                _messageBroadcaster.Complete();
            });
            _messageBroadcaster = new BroadcastBlock <Bucket>(Bucket.Clone);
            _messageBroadcaster.Completion.LogAndContinueWith("MessageBroadcaster", () =>
            {
                _log.Info("MessageBroadcaster: Completion signaled. Notifying all backends.");
                _backends.ForEach(q => q.Complete());
            });

            // Add the broadcaster to the IOC container
            container.Register <BroadcastBlock <Bucket> >(_messageBroadcaster);
            systemMetricsService.SetTarget(_messageBroadcaster);

            _backends  = new List <IBackend>();
            _listeners = new List <IListener>();
        }
Example #2
0
        public Statsd(string serviceName = null)
        {
            _log.Info("statsd.net starting.");
            _tokenSource = new CancellationTokenSource();
            _shutdownComplete = new ManualResetEvent(false);

            SuperCheapIOC.Add(_log);
            var systemInfoService = new SystemInfoService();
            SuperCheapIOC.Add(systemInfoService as ISystemInfoService);
            serviceName = serviceName ?? systemInfoService.HostName;
            var systemMetricsService = new SystemMetricsService("statsdnet", serviceName);
            SuperCheapIOC.Add(systemMetricsService as ISystemMetricsService);

            /**
             * The flow is:
             *  Listeners ->
             *    Message Parser ->
             *      router ->
             *        Aggregator ->
             *          Broadcaster ->
             *            Backends
             */

            // Initialise the core blocks
            _router = new StatsdMessageRouterBlock();
            _messageParser = MessageParserBlockFactory.CreateMessageParserBlock(_tokenSource.Token,
              SuperCheapIOC.Resolve<ISystemMetricsService>(),
              _log);
            _messageParser.LinkTo(_router);
            _messageParser.Completion.LogAndContinueWith(_log, "MessageParser", () =>
              {
                  _log.Info("MessageParser: Completion signaled. Notifying the MessageBroadcaster.");
                  _messageBroadcaster.Complete();
              });
            _messageBroadcaster = new BroadcastBlock<Bucket>(Bucket.Clone);
            _messageBroadcaster.Completion.LogAndContinueWith(_log, "MessageBroadcaster", () =>
              {
                  _log.Info("MessageBroadcaster: Completion signaled. Notifying all backends.");
                  _backends.ForEach(q => q.Complete());
              });

            // Add the broadcaster to the IOC container
            SuperCheapIOC.Add<BroadcastBlock<Bucket>>(_messageBroadcaster);
            systemMetricsService.SetTarget(_messageBroadcaster);

            _backends = new List<IBackend>();
            _listeners = new List<IListener>();
        }