#7 Added background service to periodically delete expired tickets

This commit is contained in:
henry 2025-05-15 20:19:28 -04:00
parent 18a5a64d4e
commit 713d8c9956
5 changed files with 28 additions and 9 deletions

View File

@ -15,8 +15,5 @@ namespace AccessQueueService.Data
public int DeleteExpiredTickets(); public int DeleteExpiredTickets();
public bool RemoveUser(string userId); public bool RemoveUser(string userId);
public bool DidDequeueUntilFull(int activeSeconds, int expirationSeconds, int capacityLimit); public bool DidDequeueUntilFull(int activeSeconds, int expirationSeconds, int capacityLimit);
} }
} }

View File

@ -50,11 +50,6 @@ namespace AccessQueueService.Data
return count; return count;
} }
public void RemoveUser(string userId)
{
_accessTickets.Remove(userId);
}
public bool DidDequeueUntilFull(int activeSeconds, int expirationSeconds, int capacityLimit) public bool DidDequeueUntilFull(int activeSeconds, int expirationSeconds, int capacityLimit)
{ {
var now = DateTime.UtcNow; var now = DateTime.UtcNow;

View File

@ -11,6 +11,7 @@ builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
builder.Services.AddSingleton<IAccessService, AccessService>(); builder.Services.AddSingleton<IAccessService, AccessService>();
builder.Services.AddSingleton<IAccessQueueRepo, TakeANumberAccessQueueRepo>(); builder.Services.AddSingleton<IAccessQueueRepo, TakeANumberAccessQueueRepo>();
builder.Services.AddHostedService<AccessCleanupBackgroundService>();
var app = builder.Build(); var app = builder.Build();

View File

@ -0,0 +1,25 @@

namespace AccessQueueService.Services
{
public class AccessCleanupBackgroundService : BackgroundService
{
private readonly IAccessService _accessService;
private readonly IConfiguration _config;
public AccessCleanupBackgroundService(IAccessService accessService, IConfiguration config)
{
_accessService = accessService;
_config = config;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var cleanupIntervalMillis = _config.GetValue<int>("AccessQueue:CleanupIntervalSeconds") * 1000;
while (!stoppingToken.IsCancellationRequested)
{
_accessService.DeleteExpiredTickets();
await Task.Delay(cleanupIntervalMillis, stoppingToken);
}
}
}
}

View File

@ -9,7 +9,8 @@
"CapacityLimit": 100, // Maximum number of active users "CapacityLimit": 100, // Maximum number of active users
"ActivitySeconds": 900, // Time since last access before a user is considered inactive "ActivitySeconds": 900, // Time since last access before a user is considered inactive
"ExpirationSeconds": 43200, // 12 hours - Time before a user access is revoked "ExpirationSeconds": 43200, // 12 hours - Time before a user access is revoked
"RollingExpiration": true // Whether to extend expiration time on access "RollingExpiration": true, // Whether to extend expiration time on access
"CleanupIntervalSeconds": 60 // Interval for cleaning up expired users
}, },
"AllowedHosts": "*" "AllowedHosts": "*"
} }