Example #1
0
        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);
        }
Example #2
0
        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);
        }