private async Task <bool> ProcessJob(StartConversionJob job) { try { _logger.LogInformation("Recieved '{JobName}' job.", job.Name); var storageObject = await _storageProvider.GetObjectMetadata( Shared.Constants.Buckets.Original, job.FileId); if (storageObject.Metadata.ContainsKey(Shared.Constants.Metadata.FileType) && storageObject.Metadata.ContainsKey(Shared.Constants.Metadata.ConvertTo)) { var fileType = storageObject.Metadata[Shared.Constants.Metadata.FileType]; var convertTo = storageObject.Metadata[Shared.Constants.Metadata.ConvertTo]; var newJob = new ConvertDocumentJob { DesiredExtension = convertTo, FileId = job.FileId, OriginalExtension = GetExtension(fileType), Name = $"Convert document from {fileType} to {convertTo}." }; _messageQueue.QueueJob(newJob); _logger.LogInformation("Job '{JobName}' was processed successfuly.", job.Name); return(true); } else { _logger.LogError("The file ('{FileId}') accompanying Job '{JobName}' doesn't have enough metadata.", job.FileId, job.Name); } } catch (Exception ex) { _logger.LogError(ex, "Job 'JobName' failed because: {Message}.", job.Name, ex.Message); } return(false); }
private async Task <bool> ProcessJob(ConvertDocumentJob job) { try { _logger.LogInformation("Recieved '{JobName}' job.", job.Name); if (string.IsNullOrWhiteSpace(job.OriginalExtension)) { _logger.LogError("Job '{JobName}' failed because it didn't contain the original extension.", job.Name); } var fileName = job.FileId + "." + job.OriginalExtension; var fullPath = Path.Combine(_workFolder, fileName); using (var file = File.OpenWrite(fullPath)) { var storageFile = await _provider.GetObject(Shared.Constants.Buckets.Original, job.FileId); using (var stream = storageFile.Data) { await stream.CopyToAsync(file); } } var result = Converter.Convert(fullPath, job.DesiredExtension, _workFolder); if (result.Successful) { var resultPath = await CopyFile(result.OutputFile, _outputFolder); var info = new FileInfo(resultPath); var contentType = KitchenSink.GetContentTypeFromExtension(info.Extension); using (var file = File.OpenRead(resultPath)) { await _provider.UploadObject(file, Shared.Constants.Buckets.Result, job.FileId, contentType); } var notifyJob = new NotifyUserJob { IsSuccessful = true, FileId = job.FileId }; _messageQueue.QueueJob(notifyJob); _logger.LogInformation("Job '{JobName}' was processed successfuly. Took {milliseconds} ms.", job.Name, result.Time.TotalMilliseconds); return(true); } else if (result.TimedOut) { _logger.LogError("Job '{JobName}' timed out after {milliseconds} ms.", job.Name, result.Time.TotalMilliseconds); // TODO: Let user know when task fails } else { _logger.LogError("Job '{JobName}' failed. Reason: {Reason} Took {milliseconds} ms.", job.Name, result.Output, result.Time.TotalMilliseconds); // TODO: Let user know when task fails } } catch (Exception ex) { _logger.LogError(ex, "Job 'JobName' failed because: {Message}.", job.Name, ex.Message); } return(false); }