Beispiel #1
0
        internal override void OnStart()
        {
            base.OnStart();

            _publisher = _pubSubFactory.GetPublisher(Interrupter.Token, Logger, dashboardChannel);

            _subscriber = _pubSubFactory.GetSubscriber(Interrupter.Token, Logger, dashboardChannel);


            _subscriber.Subscribe(statusRequest, OnStatusRequest);
        }
Beispiel #2
0
        public PubSubWatchDog(ILogger logger, IStateManager stateManager, IPubSubFactory publisherFactory, CancellationToken cancellationToken, IEventAggregator eventAggregator)
        {
            _logger          = logger;
            _stateManager    = stateManager;
            _eventAggregator = eventAggregator;
            _publisher       = publisherFactory.GetPublisher(cancellationToken, logger, nameof(IWatchDogMessage));
            _subscriber      = publisherFactory.GetSubscriber(cancellationToken, logger, nameof(IWatchDogMessage));

            _serializer = SerializersFactory.Instance.GetSerializer(typeof(GroupMessage));

            _subscriber.Subscribe(nameof(ProcessRemovedWatchDogMessage), ProcessRemovedFromMaster);
            _subscriber.Subscribe(nameof(TriggerProducerWatchDogMessage), ProcessVolumeChangedFromMaster);
            _healthSub = _eventAggregator.Subscribe4Broadcast <HealthMessage>(PublishHealth);
        }
Beispiel #3
0
        internal override void OnStart()
        {
            base.OnStart();
            _slaveMessageSubscriber = _pubSubFactory.GetSubscriber(Interrupter.Token, Logger, nameof(IWatchDogMessage));
            //_slaveMessageSubscriber.Subscribe(nameof(IWatchDogMessage), HandleSlaveMessages);

            _slaveMessageSubscriber.Subscribe(nameof(GroupMessage), s => HandleWatchDogMessage <GroupMessage>(s,
                                                                                                              message =>
            {
                message.SetGroupEntity(_stateManager.GetGroupEntity(message.GroupId));
                if (message.Action == GroupActions.Stop)
                {
                    Logger.Info($"Received group stop from slave for Id {message.Group.Id}");
                    CheckSyncGroup(message.Group);
                    return(true);
                }

                return(false);
            }));


            _slaveMessageSubscriber.Subscribe(nameof(ProcessInputIdleWatchDogMessage),
                                              s => HandleWatchDogMessage <ProcessInputIdleWatchDogMessage>(s));

            _slaveMessageSubscriber.Subscribe <ProcessGroupAddedMessage>(s =>
            {
                _lock.EnterReadLock();
                try
                {
                    if (_runningGroups.ContainsKey(s.GroupId))
                    {
                        Logger.Trace("Watchdog New Group {groupId} already processing. dropping message.", s.GroupId);
                        return;
                    }

                    Robustness.Instance.SafeCall(() =>
                    {
                        HandleNewGroup(s.GroupId);
                    });
                }
                finally
                {
                    _lock.ExitReadLock();
                }
            });


            _publisher = _pubSubFactory.GetPublisher(Interrupter.Token, Logger, nameof(IWatchDogMessage));
        }
Beispiel #4
0
        protected override void Dispose(bool disposing)
        {
            Robustness.Instance.SafeCall(() => _slaveMessageSubscriber?.Dispose());

            Robustness.Instance.SafeCall(() => _publisher?.Dispose());

            _slaveMessageSubscriber = null;

            _eventAggregator.Unsubscribe(_healthSub);
            _eventAggregator.Unsubscribe(_volumeGenSub);
            _eventAggregator.Unsubscribe(_retrySub);
            _eventAggregator.Unsubscribe(_subRem);
            _eventAggregator.Unsubscribe(_checkGroupSub);
            _eventAggregator.Unsubscribe(_subGroupRemoved);
            _eventAggregator.Unsubscribe(_processAddedSub);
            _eventAggregator.Unsubscribe(_volErrorSub);

            base.Dispose(disposing);
        }