Пример #1
0
        public void RceMessageHelpers_WhenGivenListWithMissingMessages_MinimizesList()
        {
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            MessageList.RemoveAt(0);
            RceMessageHelpers.Minimize(MessageList);

            var index = 0;

            Assert.Equal(7, MessageList.Count);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000011"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000012"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000014"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000015"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000016"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000017"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000018"), MessageList[index++].MessageId);
        }
        public async Task MarkDisconnectedWorkers()
        {
            try
            {
                var pastTimestamp =
                    DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() -
                    (long)TimeSpan.FromMinutes(DeclareDisconnectedAfterMinutes).TotalMilliseconds;
                var oldMessages = await _messageRepository.GetMessagesBefore(pastTimestamp);

                var newMessages = await _messageRepository.GetMessagesAfter(pastTimestamp);

                var previouslyActiveWorkers = RceMessageHelpers.GetActiveWorkerIds(oldMessages).ToList();
                var currentlyActiveWorkers  = RceMessageHelpers.GetActiveWorkerIds(newMessages).ToList();

                foreach (var disconnectedWorkerId in previouslyActiveWorkers.Except(currentlyActiveWorkers))
                {
                    if (await _messageRepository.IsDisconnected(disconnectedWorkerId))
                    {
                        continue;
                    }

                    await _messageRepository.AddMessage(new WorkerRemovedMessage
                    {
                        WorkerId         = disconnectedWorkerId,
                        ConnectionStatus = WorkerRemovedMessage.Statuses.ConnectionLost
                    });
                }
            }
            catch (Exception e)
            {
                // ignore
            }
        }
Пример #3
0
        public void RceMessageHelpers_WhenGivenFullList_MinimizesList()
        {
            RceMessageHelpers.Minimize(MessageList);

            var index = 0;

            Assert.Equal(1, MessageList.Count);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000003"), MessageList[index++].MessageId);
        }
Пример #4
0
        public void RceMessageHelpers_WhenGivenListWithoutWorkerOneCreated_MinimizesList()
        {
            MessageList.RemoveAt(0);
            RceMessageHelpers.Minimize(MessageList);

            var index = 0;

            Assert.Equal(4, MessageList.Count);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000003"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000004"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000006"), MessageList[index++].MessageId);
            Assert.Equal(new Guid("00000000-0000-0000-0000-000000000012"), MessageList[index++].MessageId);
        }
Пример #5
0
        public async Task <IActionResult> GetMessages()
        {
            try
            {
                var messages = await _serverService.GetMyMessages();

                return(Ok(RceMessageHelpers.Minimize(messages.ToList())));
            }
            catch (Exception e)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, e.Message));
            }
        }
        public async Task RemoveOldActivity()
        {
            try
            {
                var pastTimestamp =
                    DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() -
                    (long)TimeSpan.FromMinutes(DeclareOldAfterMinutes).TotalMilliseconds;
                var messages = await _messageRepository.GetMessagesBefore(pastTimestamp);

                var redundantMessages = RceMessageHelpers.GetRedundantMessages(messages).ToList();
                await _messageRepository.RemoveMessages(redundantMessages.Select(e => e.MessageId));

                await _messageRepository.RemoveOwnership(redundantMessages
                                                         .Where(e => e is WorkerRemovedMessage)
                                                         .Select(e => ((WorkerRemovedMessage)e).WorkerId)
                                                         .Distinct());
            }
            catch (Exception e)
            {
                // ignore
            }
        }