示例#1
0
        public async Task PublishEvent(Guid id, string url, CancellationToken cancellationToken)
        {
            var eventdata = new TradiureTranscriptionRequest()
            {
                TranscriptionId = id,
                BlobUri         = url
            };

            await _client.PublishEventAsync(Components.PubSubName, Topics.TranscriptionSubmittedTopicName, eventdata, cancellationToken);
        }
        private async Task PublishTranscriptionCompletion(string transcriptionId, string uri)
        {
            _logger.LogInformation($"{transcriptionId}. Azure Cognitive Services has completed processing transcription");
            await UpdateStateRepository(TraduireTranscriptionStatus.Completed, HttpStatusCode.OK);

            var completionEvent = new TradiureTranscriptionRequest()
            {
                TranscriptionId = new Guid(transcriptionId),
                BlobUri         = uri
            };

            await _client.PublishEventAsync(Components.PubSubName, Topics.TranscriptionCompletedTopicName, completionEvent, CancellationToken.None);

            await UnregisterReminderAsync(ProcessingStatusReminder);
        }
示例#3
0
        public async Task <ActionResult> Transcribe(TradiureTranscriptionRequest request, CancellationToken cancellationToken)
        {
            try
            {
                _logger.LogInformation($"{request.TranscriptionId}. {request.BlobUri} was successfullly received by Dapr PubSub");
                (Transcription response, HttpStatusCode code) = await _cogsClient.SubmitTranscriptionRequestAsync(new Uri(request.BlobUri));

                await _serviceClient.PublishNotification(request.TranscriptionId.ToString(), response.Status);

                return(code switch
                {
                    HttpStatusCode.Created => await HandleSuccess(response.Self, request.TranscriptionId),
                    _ => await HandleFailure(response.Self, request.TranscriptionId),
                });
            }
        public async Task SubmitAsync(string transcriptionId, string uri)
        {
            transcriptionRequest = new TradiureTranscriptionRequest()
            {
                TranscriptionId = new Guid(transcriptionId),
                BlobUri         = uri
            };

            await UpdateStateRepository(TraduireTranscriptionStatus.Pending, HttpStatusCode.Accepted);

            _logger.LogInformation($"{transcriptionId}. Registering {ProcessingStatusReminder} Actor Reminder for {WAIT_TIME} seconds");
            await RegisterReminderAsync(
                ProcessingStatusReminder,
                null,
                TimeSpan.FromSeconds(WAIT_TIME),
                TimeSpan.FromSeconds(WAIT_TIME));
        }
示例#5
0
        public async Task <ActionResult> Transcribe(TradiureTranscriptionRequest request, CancellationToken cancellationToken)
        {
            try
            {
                _logger.LogInformation($"{request.TranscriptionId}. {request.BlobUri} was successfullly received by Dapr PubSub");
                _logger.LogInformation($"{request.TranscriptionId}. Instantiating a Transcription Actor to handle saga");
                var transcriptionActor = this.GetTranscriptionActor(request.TranscriptionId);
                await transcriptionActor.SubmitAsync(request.TranscriptionId.ToString(), request.BlobUri);

                return(Ok());
            }
            catch (Exception ex)
            {
                _logger.LogWarning($"Nuts. Something really bad happened processing {request.BlobUri} - {ex.Message}");
            }

            return(BadRequest());
        }
        public async Task <ActionResult> Transcribe(TradiureTranscriptionRequest request, CancellationToken cancellationToken)
        {
            try
            {
                _logger.LogInformation($"{request.TranscriptionId}. {request.BlobUri} was successfullly received by Dapr PubSub");
                state = await _client.GetStateEntryAsync <TraduireTranscription>(Components.StateStoreName, request.TranscriptionId.ToString());

                state.Value ??= new TraduireTranscription();

                (TranscriptionResults result, HttpStatusCode code) = await _cogsClient.DownloadTranscriptionResultAsync(new Uri(request.BlobUri));

                switch (code)
                {
                case HttpStatusCode.OK:
                    _logger.LogInformation($"{request.TranscriptionId}. Transcription from '{request.BlobUri}' was saved to state store ");
                    var firstChannel = result.CombinedRecognizedPhrases.FirstOrDefault();

                    await _serviceClient.PublishNotification(request.TranscriptionId.ToString(), state.Value.Status.ToString());
                    await UpdateStateRepository(TraduireTranscriptionStatus.Completed, firstChannel.Display);

                    _logger.LogInformation($"{request.TranscriptionId}. All working completed on request");
                    return(Ok(request.TranscriptionId));

                default:
                    _logger.LogInformation($"{request.TranscriptionId}. Transcription Failed for an unexpected reason. Added to Failed Queue for review");
                    var failedEvent = await UpdateStateRepository(TraduireTranscriptionStatus.Failed, code, request.BlobUri);

                    await _client.PublishEventAsync(Components.PubSubName, Topics.TranscriptionFailedTopicName, failedEvent, cancellationToken);

                    break;
                }
            }
            catch (Exception ex)
            {
                _logger.LogWarning($"Nuts. Something really bad happened processing {request.BlobUri} - {ex.Message}");
            }

            return(BadRequest());
        }