From b5e4d68550928ac5f7e9c25ffc4a6f1dd0cfba28 Mon Sep 17 00:00:00 2001 From: MaksimChegulov Date: Thu, 3 Feb 2022 14:54:31 +0300 Subject: [PATCH] ClearEvents: used file-scope namespaces --- .../Services/TimedClearEventsService.cs | 187 +++++++++--------- 1 file changed, 93 insertions(+), 94 deletions(-) diff --git a/common/services/ASC.ClearEvents/Services/TimedClearEventsService.cs b/common/services/ASC.ClearEvents/Services/TimedClearEventsService.cs index f67e567760..9ee0ddc659 100644 --- a/common/services/ASC.ClearEvents/Services/TimedClearEventsService.cs +++ b/common/services/ASC.ClearEvents/Services/TimedClearEventsService.cs @@ -43,109 +43,108 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; -namespace ASC.ClearEvents.Services +namespace ASC.ClearEvents.Services; + +[Scope(Additional = typeof(MessagesRepositoryExtension))] +public class TimedClearEventsService : IHostedService, IDisposable { - [Scope(Additional = typeof(MessagesRepositoryExtension))] - public class TimedClearEventsService : IHostedService, IDisposable + private readonly ILog _logger; + private readonly IServiceScopeFactory _serviceScopeFactory; + private Timer _timer = null!; + + public TimedClearEventsService(IOptionsMonitor options, IServiceScopeFactory serviceScopeFactory) { - private readonly ILog _logger; - private readonly IServiceScopeFactory _serviceScopeFactory; - private Timer _timer = null!; + _logger = options.CurrentValue; + _serviceScopeFactory = serviceScopeFactory; + } - public TimedClearEventsService(IOptionsMonitor options, IServiceScopeFactory serviceScopeFactory) + public Task StartAsync(CancellationToken cancellationToken) + { + _logger.Info("Timer Clear Events Service running."); + + _timer = new Timer(DeleteOldEvents, null, TimeSpan.Zero, + TimeSpan.FromDays(1)); + + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + _logger.Info("Timed Clear Events Service is stopping."); + + _timer?.Change(Timeout.Infinite, 0); + + return Task.CompletedTask; + } + + public void Dispose() + { + var handle = new AutoResetEvent(false); + + if ((bool)!(_timer?.Dispose(handle))) + throw new Exception("Timer already disposed"); + + handle.WaitOne(); + } + + private void DeleteOldEvents(object state) + { + try { - _logger = options.CurrentValue; - _serviceScopeFactory = serviceScopeFactory; + GetOldEvents(r => r.LoginEvents, "LoginHistoryLifeTime"); + GetOldEvents(r => r.AuditEvents, "AuditTrailLifeTime"); } - - public Task StartAsync(CancellationToken cancellationToken) + catch (Exception ex) { - _logger.Info("Timer Clear Events Service running."); - - _timer = new Timer(DeleteOldEvents, null, TimeSpan.Zero, - TimeSpan.FromDays(1)); - - return Task.CompletedTask; - } - - public Task StopAsync(CancellationToken cancellationToken) - { - _logger.Info("Timed Clear Events Service is stopping."); - - _timer?.Change(Timeout.Infinite, 0); - - return Task.CompletedTask; - } - - public void Dispose() - { - var handle = new AutoResetEvent(false); - - if ((bool)!(_timer?.Dispose(handle))) - throw new Exception("Timer already disposed"); - - handle.WaitOne(); - } - - private void DeleteOldEvents(object state) - { - try - { - GetOldEvents(r => r.LoginEvents, "LoginHistoryLifeTime"); - GetOldEvents(r => r.AuditEvents, "AuditTrailLifeTime"); - } - catch (Exception ex) - { - _logger.Error(ex.Message, ex); - } - } - - private void GetOldEvents(Expression>> func, string settings) where T : MessageEvent - { - List ids; - var compile = func.Compile(); - do - { - using var scope = _serviceScopeFactory.CreateScope(); - using var ef = scope.ServiceProvider.GetService>().Get("messages"); - var table = compile.Invoke(ef); - - var ae = table - .Join(ef.Tenants, r => r.TenantId, r => r.Id, (audit, tenant) => audit) - .Select(r => new - { - r.Id, - r.Date, - r.TenantId, - ef = r - }) - .Where(r => r.Date < DateTime.UtcNow.AddDays(-Convert.ToDouble( - ef.WebstudioSettings - .Where(a => a.TenantId == r.TenantId && a.Id == TenantAuditSettings.Guid) - .Select(r => JsonExtensions.JsonValue(nameof(r.Data).ToLower(), settings)) - .FirstOrDefault() ?? TenantAuditSettings.MaxLifeTime.ToString()))) - .Take(1000); - - ids = ae.Select(r => r.ef).ToList(); - - if (!ids.Any()) return; - - table.RemoveRange(ids); - ef.SaveChanges(); - - } while (ids.Any()); + _logger.Error(ex.Message, ex); } } - public class Messages : MessagesContext + private void GetOldEvents(Expression>> func, string settings) where T : MessageEvent { - public DbSet AuditEvents { get; } - public DbSet Tenants { get; } - public DbSet WebstudioSettings { get; } - } - - public class MessagesRepositoryExtension - { - public static void Register(DIHelper services) => services.TryAdd>(); + List ids; + var compile = func.Compile(); + do + { + using var scope = _serviceScopeFactory.CreateScope(); + using var ef = scope.ServiceProvider.GetService>().Get("messages"); + var table = compile.Invoke(ef); + + var ae = table + .Join(ef.Tenants, r => r.TenantId, r => r.Id, (audit, tenant) => audit) + .Select(r => new + { + r.Id, + r.Date, + r.TenantId, + ef = r + }) + .Where(r => r.Date < DateTime.UtcNow.AddDays(-Convert.ToDouble( + ef.WebstudioSettings + .Where(a => a.TenantId == r.TenantId && a.Id == TenantAuditSettings.Guid) + .Select(r => JsonExtensions.JsonValue(nameof(r.Data).ToLower(), settings)) + .FirstOrDefault() ?? TenantAuditSettings.MaxLifeTime.ToString()))) + .Take(1000); + + ids = ae.Select(r => r.ef).ToList(); + + if (!ids.Any()) return; + + table.RemoveRange(ids); + ef.SaveChanges(); + + } while (ids.Any()); } +} + +public class Messages : MessagesContext +{ + public DbSet AuditEvents { get; } + public DbSet Tenants { get; } + public DbSet WebstudioSettings { get; } +} + +public class MessagesRepositoryExtension +{ + public static void Register(DIHelper services) => services.TryAdd>(); } \ No newline at end of file