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); } }
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); } }
public void TestEnqueue() { queue.ClearQueue(); var task = new RecognitionTask(modelName, photoId); queue.Enqueue(task); Assert.True(queue.GetQueueCount() == 1); }
/// <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}."); } }
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); }
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); }