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); }
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); }