Пример #1
0
        private async Task InitializeQueue()
        {
            var user = new ApplicationUser {
                UserName = "******", Email = "*****@*****.**"
            };
            await app.UserManager.CreateAsync(user, "UserTest@123");

            await app.SetUser(user);

            var testSession = new Session(user.Id, DateTime.UtcNow, DateTime.UtcNow, SessionStatus.FINISHED);

            testSession.SessionID = 1;
            var testPhoto = new Photo(testSession.SessionID, new byte[] { 0x20, 0x20, 0x20 }, DateTime.UtcNow);

            testPhoto.PhotoID = 2;

            photoRepository = repository.Of <IPhotoRepository>()
                              .Where(pr => pr.GetPhotoById(It.IsAny <int>()) == testPhoto)
                              .First();

            recognitionResultsRepository = new RecognitionResultsMock();

            for (int i = 0; i < 5; i++)
            {
                RecognitionTask recognitionTask = new RecognitionTask("model1", 2);
                queue.Enqueue(recognitionTask);
            }
        }
Пример #2
0
        private async void Run(CancellationToken token)
        {
            bool isInterrupted             = false;
            int  pollingTimoutBetweenTasks = int.Parse(
                configuration.GetSection("AnalyticsPollingTimeoutBetweenTasks").Value);

            while (!isInterrupted)
            {
                try
                {
                    RecognitionTask recognitionTask = queue.Dequeue();
                    await RunTaskForRecognition(recognitionTask);

                    token.ThrowIfCancellationRequested();
                }
                catch (OperationCanceledException exception)
                {
                    logger.LogError("Tasks is cancelled");
                    isInterrupted = true;
                }
                catch (Exception exception)
                {
                    logger.LogError("Exception caught: {0}, {1}", exception.Message, exception.StackTrace);
                }
                Thread.Sleep(pollingTimoutBetweenTasks);
            }
        }
 public async Task BroadcastTaskUpdateAsync(RecognitionTask task, CancellationToken cancellationToken)
 {
     foreach (var(_, session) in _sessions)
     {
         await session.SendTaskUpdateAsync(task, cancellationToken);
     }
 }
Пример #4
0
        public void TestEnqueue()
        {
            queue.ClearQueue();
            var task = new RecognitionTask(modelName, photoId);

            queue.Enqueue(task);
            Assert.True(queue.GetQueueCount() == 1);
        }
Пример #5
0
 /// <summary>
 /// Adds recognition task to recognition queue for analytics service
 /// </summary>
 /// <param name="task">RecognitionTask - recognition task for analytics service</param>
 public void Enqueue(RecognitionTask task)
 {
     using (logger.BeginScope(nameof(Enqueue)))
     {
         queue.Add(task);
         logger.LogInformation($"Task enqueued. Task information: model name {task.ModelName}, photoId {task.PhotoId}.");
     }
 }
Пример #6
0
        public void TestDequeue()
        {
            queue.ClearQueue();
            var task = new RecognitionTask(modelName, photoId);

            queue.Enqueue(task);
            var taskRes = queue.Dequeue();

            Assert.Equal(task, taskRes);
            //not sure, if these tests are required
            Assert.True(queue.GetQueueCount() == 0);
            Assert.True(task.ModelName == taskRes.ModelName);
            Assert.True(task.PhotoId == taskRes.PhotoId);
        }
 public async Task SendTaskUpdateAsync(RecognitionTask task, CancellationToken cancellationToken)
 {
     await Socket.SendObjectAsync(new ImageTaskUpdate(task), cancellationToken);
 }
Пример #8
0
        private async Task RunTaskForRecognition(RecognitionTask recognitionTask)
        {
            string recognitionSessionUID = null;
            int    pollingTimeout        = int.Parse(configuration.GetSection("AnalyticsPollingTimeout").Value);

            while (recognitionSessionUID == null)
            {
                try
                {
                    recognitionSessionUID = await analyticsClient.RequestRecognitionSession(recognitionTask.ModelName);

                    if (recognitionSessionUID != null)
                    {
                        break;
                    }
                }
                catch (Exception exception)
                {
                    logger.LogError("Exception caught: {0}, {1}", exception.Message, exception.StackTrace);
                }
                Thread.Sleep(pollingTimeout);
            }

            Photo photo = photoRepository.GetPhotoById(recognitionTask.PhotoId);

            bool isPhotoUploaded     = false;
            int  photoUploadTryCount = int.Parse(configuration.GetSection("PhotoUploadTryCount").Value);

            for (int i = 0; i < photoUploadTryCount; i++)
            {
                try
                {
                    await analyticsClient.UploadPhoto(photo.Image, recognitionSessionUID);

                    isPhotoUploaded = true;
                    break;
                }
                catch (Exception exception)
                {
                    logger.LogError("Exception caught: {0}, {1}", exception.Message, exception.StackTrace);
                    Thread.Sleep(pollingTimeout);
                }
            }
            if (!isPhotoUploaded)
            {
                queue.Enqueue(recognitionTask);
                return;
            }

            RecognitionResults recognitionResults = null;

            while (recognitionResults == null)
            {
                try
                {
                    recognitionResults = await analyticsClient.TryGetResults(recognitionSessionUID, recognitionTask.PhotoId);

                    if (recognitionResults != null)
                    {
                        break;
                    }
                }
                catch (Exception exception)
                {
                    logger.LogError("Exception caught: {0}, {1}", exception.Message, exception.StackTrace);
                }
                Thread.Sleep(pollingTimeout);
            }
            recognitionRepository.Add(recognitionResults);
        }