From 254a50da4dbeb23b188fee86d58a9a56cc57d30e Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 13 Nov 2024 15:14:22 +0100 Subject: [PATCH] feat: clear timeouts that never get logged --- .../Database/Repositories/TimeoutRepository.cs | 10 +++++++++- Catalogger.Backend/Services/BackgroundTasksService.cs | 11 +++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs b/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs index 9917aec..f50a177 100644 --- a/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs +++ b/Catalogger.Backend/Database/Repositories/TimeoutRepository.cs @@ -5,7 +5,9 @@ using Remora.Rest.Core; namespace Catalogger.Backend.Database.Repositories; -public class TimeoutRepository(DatabaseConnection conn) : IDisposable, IAsyncDisposable +public class TimeoutRepository(DatabaseConnection conn, IClock clock) + : IDisposable, + IAsyncDisposable { public async Task GetAsync(int id) => await conn.QueryFirstOrDefaultAsync( @@ -62,6 +64,12 @@ public class TimeoutRepository(DatabaseConnection conn) : IDisposable, IAsyncDis new { GuildId = guildId.Value, UserId = userId.Value } ); + public async Task RemoveExpiredTimeoutsAsync() => + await conn.ExecuteAsync( + "delete from timeouts where until < @Expiry", + new { Expiry = clock.GetCurrentInstant() - Duration.FromMinutes(5) } + ); + public void Dispose() { conn.Dispose(); diff --git a/Catalogger.Backend/Services/BackgroundTasksService.cs b/Catalogger.Backend/Services/BackgroundTasksService.cs index 11a35da..c23e96b 100644 --- a/Catalogger.Backend/Services/BackgroundTasksService.cs +++ b/Catalogger.Backend/Services/BackgroundTasksService.cs @@ -35,16 +35,23 @@ public class BackgroundTasksService(ILogger logger, IServiceProvider services) : await using var scope = services.CreateAsyncScope(); await using var messageRepository = scope.ServiceProvider.GetRequiredService(); + await using var timeoutRepository = + scope.ServiceProvider.GetRequiredService(); var (msgCount, ignoredCount) = await messageRepository.DeleteExpiredMessagesAsync(); if (msgCount != 0 || ignoredCount != 0) - { _logger.Information( "Deleted {Count} messages and {IgnoredCount} ignored message IDs older than {MaxDays} days old", msgCount, ignoredCount, MessageRepository.MaxMessageAgeDays ); - } + + var timeoutCount = await timeoutRepository.RemoveExpiredTimeoutsAsync(); + if (timeoutCount != 0) + _logger.Information( + "Deleted {Count} expired timeouts that were never logged", + timeoutCount + ); } }