From 73a824057b7ad726f73fa347f1ac5da0ed28c4f6 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Thu, 15 Jun 2023 10:14:27 +1000 Subject: [PATCH] Worker --- PARR.AIHIT/AIHIT/Syncher.cs | 2 + PARR.DAL/Models/ApplicationInHost.cs | 2 +- PARR.DAL/PARR.DAL.csproj | 4 -- PARR.Mail/PARR.Mail/Services/IMailService.cs | 2 +- PARR.Mail/PARR.Mail/Services/MailService.cs | 72 ++++++++++++++----- .../PARR.Worker/Settings/WorkerSettings.cs | 2 +- PARR.Worker/PARR.Worker/Worker.cs | 8 ++- PARR.Worker/PARR.Worker/appsettings.json | 2 +- 8 files changed, 67 insertions(+), 27 deletions(-) diff --git a/PARR.AIHIT/AIHIT/Syncher.cs b/PARR.AIHIT/AIHIT/Syncher.cs index 5d128395..08ea8fb0 100644 --- a/PARR.AIHIT/AIHIT/Syncher.cs +++ b/PARR.AIHIT/AIHIT/Syncher.cs @@ -57,6 +57,7 @@ namespace PARR.AIHIT { await GetAppTypesAsync(); + var messages = await mailService.CheckMailAsync(SearchQuery.NotSeen); if (!messages.Any()) { @@ -65,6 +66,7 @@ namespace PARR.AIHIT var filtered = messages.Where(m => syncherSettings.IncludeAddressesArray.Any(i => m.Envelope.From.Mailboxes.FirstOrDefault()?.Address == i)).ToList(); var lastMessage = filtered.OrderByDescending(f => f.Date).First(); var attachments = await mailService.GetAttachmentsAsync(lastMessage); + foreach (var attachment in attachments) { if (attachment is MessagePart) diff --git a/PARR.DAL/Models/ApplicationInHost.cs b/PARR.DAL/Models/ApplicationInHost.cs index 0ca7c80a..969c03c0 100644 --- a/PARR.DAL/Models/ApplicationInHost.cs +++ b/PARR.DAL/Models/ApplicationInHost.cs @@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations.Schema; namespace PARR.DAL.Models { - [Table("ApplicationsinHosts")] + [Table("ApplicationsInHosts")] public class ApplicationInHost : IBase { public Guid Id { get; set; } diff --git a/PARR.DAL/PARR.DAL.csproj b/PARR.DAL/PARR.DAL.csproj index 641b0411..92142b15 100644 --- a/PARR.DAL/PARR.DAL.csproj +++ b/PARR.DAL/PARR.DAL.csproj @@ -16,8 +16,4 @@ - - - - diff --git a/PARR.Mail/PARR.Mail/Services/IMailService.cs b/PARR.Mail/PARR.Mail/Services/IMailService.cs index 1f06ea07..e8f29e4a 100644 --- a/PARR.Mail/PARR.Mail/Services/IMailService.cs +++ b/PARR.Mail/PARR.Mail/Services/IMailService.cs @@ -7,7 +7,7 @@ namespace PARR.Mail.Services public interface IMailService { Task> CheckMailAsync(SearchQuery query); - Task GetBodyPartAsync(IMessageSummary messageSummary); + Task GetBodyPartAsync(IMessageSummary messageSummary); Task> GetAttachmentsAsync(IMessageSummary messageSummary); Task GetBodyTextAsync(IMessageSummary messageSummary); Task SetAsSeenAsync(IMessageSummary messageSummary); diff --git a/PARR.Mail/PARR.Mail/Services/MailService.cs b/PARR.Mail/PARR.Mail/Services/MailService.cs index 15e52961..95c84132 100644 --- a/PARR.Mail/PARR.Mail/Services/MailService.cs +++ b/PARR.Mail/PARR.Mail/Services/MailService.cs @@ -35,50 +35,86 @@ namespace PARR.Mail.Services return items; } - public async Task GetBodyPartAsync(IMessageSummary messageSummary) + public async Task GetBodyPartAsync(IMessageSummary messageSummary) { - using var client = await GetClient(); + try + { + using var client = await GetClient(); - return await client.Inbox.GetBodyPartAsync(messageSummary.UniqueId, messageSummary.TextBody); + return await client.Inbox.GetBodyPartAsync(messageSummary.UniqueId, messageSummary.TextBody); + } + catch (Exception e) + { + logger.LogError(e, "Ошибка получения тела письма"); + } + return null; } public async Task> GetAttachmentsAsync(IMessageSummary messageSummary) { - using var client = await GetClient(); - List result = new List(); - foreach (var attachment in messageSummary.Attachments) + + try { - result.Add(await client.Inbox.GetBodyPartAsync(messageSummary.UniqueId, attachment)); + using var client = await GetClient(); + foreach (var attachment in messageSummary.Attachments) + { + result.Add(await client.Inbox.GetBodyPartAsync(messageSummary.UniqueId, attachment)); + } + } + catch (Exception e) + { + logger.LogError(e, "Ошибка получения тела письма"); } return result; } public async Task GetBodyTextAsync(IMessageSummary messageSummary) { - using var client = await GetClient(); - return ((TextPart)await client.Inbox.GetBodyPartAsync(messageSummary.UniqueId, messageSummary.TextBody)).Text; + try + { + using var client = await GetClient(); + + return ((TextPart)await client.Inbox.GetBodyPartAsync(messageSummary.UniqueId, messageSummary.TextBody)).Text; + } + catch (Exception e) + { + logger.LogError(e, "Ошибка содержания письма"); + } + return string.Empty; } public async Task SetAsSeenAsync(IMessageSummary messageSummary) { - using var client = await GetClient(); + try + { + using var client = await GetClient(); - await client.Inbox.AddFlagsAsync(messageSummary.UniqueId, MessageFlags.Seen, false); + await client.Inbox.AddFlagsAsync(messageSummary.UniqueId, MessageFlags.Seen, false); + } + catch (Exception e) + { + logger.LogError(e, "Не удалось сделать письмо прочитанным"); + } } private async Task GetClient() { var client = new ImapClient(); - await client.ConnectAsync(mailSettings.Host, mailSettings.Port, SecureSocketOptions.None); - await client.AuthenticateAsync(mailSettings.UserName, mailSettings.Password); - await client.Inbox.OpenAsync(FolderAccess.ReadWrite); - - // игнорить сертификат - client.CheckCertificateRevocation = false; - client.ServerCertificateValidationCallback = (s, c, h, e) => true; + try + { + await client.ConnectAsync(mailSettings.Host, mailSettings.Port, SecureSocketOptions.None); + await client.AuthenticateAsync(mailSettings.UserName, mailSettings.Password); + await client.Inbox.OpenAsync(FolderAccess.ReadWrite); + // игнорить сертификат + client.CheckCertificateRevocation = false; + client.ServerCertificateValidationCallback = (s, c, h, e) => true; + } + catch(Exception e) { + logger.LogError(e, "Не удалось создать почтовый клиент"); + } return client; } } diff --git a/PARR.Worker/PARR.Worker/Settings/WorkerSettings.cs b/PARR.Worker/PARR.Worker/Settings/WorkerSettings.cs index 30645916..8575789a 100644 --- a/PARR.Worker/PARR.Worker/Settings/WorkerSettings.cs +++ b/PARR.Worker/PARR.Worker/Settings/WorkerSettings.cs @@ -2,6 +2,6 @@ { public class WorkerSettings { - public int OccursEvery { get; set; } + public TimeSpan OccursEvery { get; set; } } } diff --git a/PARR.Worker/PARR.Worker/Worker.cs b/PARR.Worker/PARR.Worker/Worker.cs index f95cfb5f..c2e11170 100644 --- a/PARR.Worker/PARR.Worker/Worker.cs +++ b/PARR.Worker/PARR.Worker/Worker.cs @@ -24,6 +24,7 @@ namespace PARR.Worker logger.LogInformation("--- Сервис запущен! ---"); while (!stoppingToken.IsCancellationRequested) { + logger.LogInformation("--- --- --- --- Начало синхронизации --- --- --- ---"); using var scope = serviceProvider.CreateScope(); var services = scope.ServiceProvider; var syncer = services.GetService(); @@ -36,7 +37,12 @@ namespace PARR.Worker //await attachmentUploader.UploadAsync(); //logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); - await Task.Delay(workerSettings.OccursEvery, stoppingToken); + logger.LogInformation("=== === === === Конец синхронизации === === === ==="); + + + var mills = (int?) workerSettings?.OccursEvery.TotalMilliseconds ?? 60*1000; + await Task.Delay(mills, stoppingToken); + } } } diff --git a/PARR.Worker/PARR.Worker/appsettings.json b/PARR.Worker/PARR.Worker/appsettings.json index 4e6dc96d..dcb20b3c 100644 --- a/PARR.Worker/PARR.Worker/appsettings.json +++ b/PARR.Worker/PARR.Worker/appsettings.json @@ -37,7 +37,7 @@ "IncludeAddresses": "aihit@gvc.rzd" }, "WorkerSettings": { - "OccursEvery": 60000 + "OccursEvery": "00:10:00.0" } }