From 9383a2fb09ffb60cfe63683106945bd688affa59 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Wed, 1 Jun 2022 21:13:43 +0200 Subject: feat: Initial commit after clean slate --- .../AssetsCleanupBackgroundService.cs | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/BackgroundServices/AssetsCleanupBackgroundService.cs (limited to 'src/BackgroundServices/AssetsCleanupBackgroundService.cs') diff --git a/src/BackgroundServices/AssetsCleanupBackgroundService.cs b/src/BackgroundServices/AssetsCleanupBackgroundService.cs new file mode 100644 index 0000000..effb5d7 --- /dev/null +++ b/src/BackgroundServices/AssetsCleanupBackgroundService.cs @@ -0,0 +1,61 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using VSH.Services; + +namespace VSH.BackgroundServices; + +/// +/// This service is not really necessary, but it is nice to have for future reference. +/// The job that this service is doing, could maybe become an http endpoint? +/// +public class AssetsCleanupBackgroundService : BackgroundService +{ + private readonly IServiceProvider _serviceProvider; + private readonly ILogger _logger; + + private static TimeSpan CleanupInterval => TimeSpan.FromSeconds(10); + + public AssetsCleanupBackgroundService( + IServiceProvider serviceProvider, + ILogger logger + ) { + _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); + _logger = logger; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { + await StartInternalAsync(stoppingToken); + } + + private async Task StartInternalAsync(CancellationToken cancellationToken) { + while (true) { + if (cancellationToken.IsCancellationRequested) { + _logger.LogDebug("CancellationRequested... Exiting"); + break; + } + + try { + await Task.Delay(CleanupInterval, cancellationToken); + } catch (TaskCanceledException) { + _logger.LogDebug("TaskCanceledException... Exiting"); + break; + } catch (Exception ex) { + _logger.LogError($"Task.Delay exception: {ex.Message}. Exiting."); + break; + } + + if (cancellationToken.IsCancellationRequested) { + _logger.LogDebug("CancellationRequested... Exiting"); + break; + } + + using var serviceProvider = _serviceProvider.CreateScope(); + var assetsService = serviceProvider.ServiceProvider.GetRequiredService(); + await assetsService.RemoveUnusedProductImages(); + } + } +} -- cgit v1.3