コード例 #1
0
ファイル: Worker.cs プロジェクト: mhmd-azeez/EasyConverter
        private async Task <bool> ProcessJob(NotifyUserJob job)
        {
            var link = await _storageProvider.GetPresignedDownloadLink(
                Shared.Constants.Buckets.Result, job.FileId, TimeSpan.FromHours(24));

            var key    = _configuration["SENDGRID_API_KEY"];
            var client = new SendGridClient(key);

            var message = new SendGridMessage();

            message.SetFrom(new EmailAddress("*****@*****.**", "Easy Converter"));
            // TODO: Use actual email address
            message.AddTo("*****@*****.**");
            message.SetTemplateId("d-aad5b0e03ad94172804fbf77fb301d3b");
            message.SetTemplateData(new
            {
                DownloadLink = link
            });

            var response = await client.SendEmailAsync(message);

            if (response.StatusCode != System.Net.HttpStatusCode.Accepted)
            {
                var responseBody = await response.Body.ReadAsStringAsync();

                _logger.LogError("SendGrid: " + responseBody);
            }

            return(response.StatusCode == System.Net.HttpStatusCode.Accepted);
        }
コード例 #2
0
ファイル: Worker.cs プロジェクト: mhmd-azeez/EasyConverter
        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);
        }