private void UpdateStatsFinishMsgHandler(AdapterProcessingFinished msg)
        {
            var startMessage = GetStartMessageObject <AdapterProcessingStarted>();

            if (startMessage.IsSnapshot)
            {
                _snapshotsCount++;
            }
            else
            {
                _streamUpdatesCount++;
            }

            var timeTaken = msg.CompletedAt - startMessage.UpdateReceivedAt;

            //var updateOrSnapshot = startMessage.IsSnapshot ? "Snapshot" : "Update";

            var minutes = (int)Math.Ceiling((DateTime.UtcNow - AdapterStartDate).TotalMinutes);

            if (minutes == 0)
            {
                return;
            }

            var _snapshots_perminute     = _snapshotsCount == 0 ? 0 : _snapshotsCount / minutes;
            var _streamupdates_perminute = _streamUpdatesCount == 0 ? 0 : _streamUpdatesCount / minutes;

            _logger.Info($"Adapter  {startMessage.PluginMethod} for {startMessage.Fixture}, took processingTime={timeTaken.TotalSeconds} seconds at sequence={startMessage.Sequence}");
            _logger.Info($"{startMessage.Fixture} -> Snapshots_Processed={_snapshotsCount}  StreamUpdates_Processed={_streamUpdatesCount} Snapshots_PerMinute={_snapshots_perminute} StreamUpdates_PerMinute={_streamupdates_perminute}");
        }
        public void TestUpdateStatsSnapshotCount()
        {
            //
            //Arrange
            //
            var streamStatsActorRef =
                ActorOfAsTestActorRef <StreamStatsActor>(
                    Props.Create(() => new StreamStatsActor()),
                    StreamStatsActor.ActorName);
            var dateNow             = DateTime.UtcNow;
            var updateStatsStartMsg =
                new AdapterProcessingStarted
            {
                UpdateReceivedAt = dateNow,
                Sequence         = 1,
                IsSnapshot       = true,
                Fixture          = new Fixture
                {
                    Id          = "Fixture1Id",
                    Sequence    = 1,
                    Epoch       = 1,
                    MatchStatus = MatchStatus.Prematch.ToString()
                }
            };
            var updateStatsFinishMsg =
                new AdapterProcessingFinished
            {
                CompletedAt = dateNow.AddMilliseconds(1500)
            };

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

            //
            //Assert
            //
            AwaitAssert(() =>
            {
                Assert.AreEqual(2, streamStatsActorRef.UnderlyingActor.SnapshotsCount);
                Assert.AreEqual(0, streamStatsActorRef.UnderlyingActor.StreamUpdatesCount);
                Assert.AreEqual(0, 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.AreEqual(DateTime.MinValue, streamStatsActorRef.UnderlyingActor.LastDisconnectedDate);
            },
                        TimeSpan.FromMilliseconds(ASSERT_WAIT_TIMEOUT),
                        TimeSpan.FromMilliseconds(ASSERT_EXEC_INTERVAL));
        }