public void TestUpdateStatsStreamDisconnectionsCount()
        {
            //
            //Arrange
            //
            var streamStatsActorRef =
                ActorOfAsTestActorRef <StreamStatsActor>(
                    Props.Create(() => new StreamStatsActor()),
                    StreamStatsActor.ActorName);
            var streamDisconnectedMsg = new StreamDisconnectedMsg();

            //
            //Act
            //
            streamStatsActorRef.Tell(streamDisconnectedMsg);
            Task.Delay(TimeSpan.FromMilliseconds(500));
            streamStatsActorRef.Tell(streamDisconnectedMsg);

            //
            //Assert
            //
            AwaitAssert(() =>
            {
                Assert.AreEqual(0, streamStatsActorRef.UnderlyingActor.SnapshotsCount);
                Assert.AreEqual(0, streamStatsActorRef.UnderlyingActor.StreamUpdatesCount);
                Assert.AreEqual(2, streamStatsActorRef.UnderlyingActor.DisconnectionsCount);
                Assert.AreEqual(0, streamStatsActorRef.UnderlyingActor.ErrorsCount[StreamStatsActor.PluginExceptionType]);
                Assert.AreEqual(0, streamStatsActorRef.UnderlyingActor.ErrorsCount[StreamStatsActor.ApiExceptionType]);
                Assert.AreEqual(0, streamStatsActorRef.UnderlyingActor.ErrorsCount[StreamStatsActor.GenericExceptionType]);
                Assert.Less((DateTime.UtcNow - streamStatsActorRef.UnderlyingActor.LastDisconnectedDate).TotalSeconds, 5);
            },
                        TimeSpan.FromMilliseconds(ASSERT_WAIT_TIMEOUT),
                        TimeSpan.FromMilliseconds(ASSERT_EXEC_INTERVAL));
        }
        private void StreamDisconnectedMsgHandler(StreamDisconnectedMsg msg)
        {
            try
            {
                _logger.Warn($"Stream got disconnected for {_resource}");

                var fixtureStateActor = Context.System.ActorSelection(FixtureStateActor.Path);
                var fixtureState      =
                    fixtureStateActor
                    .Ask <FixtureState>(
                        new GetFixtureStateMsg {
                    FixtureId = _fixtureId
                },
                        TimeSpan.FromSeconds(10))
                    .Result;

                if (_streamHealthCheckValidation.ShouldSuspendOnDisconnection(fixtureState, _fixtureStartTime))
                {
                    SuspendFixture(SuspensionReason.DISCONNECT_EVENT);
                }

                Become(Disconnected);
            }
            catch (Exception ex)
            {
                _logger.Error($"Error processing disconnection for {_resource} - exception - {ex}");

                _erroredException = ex;
                Become(Errored);
            }
        }
Example #3
0
        private void StreamDisconnectedMsgHandler(StreamDisconnectedMsg msg)
        {
            _disconnectionsCount++;
            _lastDisconnectedDate = DateTime.UtcNow;

            var days  = (DateTime.UtcNow - AdapterStartDate).TotalDays;
            var weeks = days > 7 ? (int)(days / 7) : 1;

            _logger.Info($"Stream got disconnected at {_lastDisconnectedDate}");
            _logger.Info($"Detected {_disconnectionsCount / weeks} Stream disconnections / week");
        }
        //Resource has been disconnected, quick reconnection will occur soon
        private void Disconnected()
        {
            State = StreamListenerState.Disconnected;

            _logger.Info($"Stream listener for {_resource} moved to Disconnected State");

            Receive <GetStreamListenerActorStateMsg>(a => Sender.Tell(State));

            var streamDisconnectedMessage = new StreamDisconnectedMsg
            {
                FixtureId = _fixtureId,
                Sport     = _resource.Sport
            };

            //tell Stream Stats actor that we got disconnected so it can monitor number of disconnections
            _streamStatsActor.Tell(streamDisconnectedMessage);

            //tell Stream Listener Manager Actor that we got disconnected so it can kill and recreate this child actor
            Context.Parent.Tell(streamDisconnectedMessage);
        }
        private void StreamDisconnectedMsgHandler(StreamDisconnectedMsg msg)
        {
            try
            {
                _logger.Warn($"Stream got disconnected for {_resource}");

                var fixtureState = GetFixtureState();

                if (_streamHealthCheckValidation.ShouldSuspendOnDisconnection(fixtureState, _fixtureStartTime))
                {
                    SuspendFixture(SuspensionReason.DISCONNECT_EVENT);
                }

                Become(Disconnected);
            }
            catch (Exception ex)
            {
                _logger.Error($"Error processing disconnection for {_resource} - exception - {ex}");

                _erroredException = ex;
                Become(Errored);
            }
        }
 private void StreamDisconnectedMsgHandler(StreamDisconnectedMsg msg)
 {
     StopStreamListenerChildActor(msg.FixtureId);
 }