use maredbcontext from controller

This commit is contained in:
rootdarkarchon
2023-09-17 03:30:43 +02:00
committed by Loporrit
parent 3cfe6fbdee
commit b2e4b99b10
2 changed files with 13 additions and 12 deletions

View File

@@ -1,4 +1,5 @@
using MareSynchronos.API.Routes; using MareSynchronos.API.Routes;
using MareSynchronosShared.Data;
using MareSynchronosStaticFilesServer.Services; using MareSynchronosStaticFilesServer.Services;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@@ -9,12 +10,14 @@ public class RequestController : ControllerBase
{ {
private readonly CachedFileProvider _cachedFileProvider; private readonly CachedFileProvider _cachedFileProvider;
private readonly RequestQueueService _requestQueue; private readonly RequestQueueService _requestQueue;
private readonly MareDbContext _mareDbContext;
private static readonly SemaphoreSlim _parallelRequestSemaphore = new(500); private static readonly SemaphoreSlim _parallelRequestSemaphore = new(500);
public RequestController(ILogger<RequestController> logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue) : base(logger) public RequestController(ILogger<RequestController> logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue, MareDbContext mareDbContext) : base(logger)
{ {
_cachedFileProvider = cachedFileProvider; _cachedFileProvider = cachedFileProvider;
_requestQueue = requestQueue; _requestQueue = requestQueue;
_mareDbContext = mareDbContext;
} }
[HttpGet] [HttpGet]
@@ -48,7 +51,7 @@ public class RequestController : ControllerBase
} }
Guid g = Guid.NewGuid(); Guid g = Guid.NewGuid();
await _requestQueue.EnqueueUser(new(g, MareUser, files.ToList())); await _requestQueue.EnqueueUser(new(g, MareUser, files.ToList()), _mareDbContext);
return Ok(g); return Ok(g);
} }
@@ -65,8 +68,8 @@ public class RequestController : ControllerBase
{ {
try try
{ {
if (!await _requestQueue.StillEnqueued(requestId, MareUser)) if (!await _requestQueue.StillEnqueued(requestId, MareUser, _mareDbContext))
await _requestQueue.EnqueueUser(new(requestId, MareUser, files.ToList())); await _requestQueue.EnqueueUser(new(requestId, MareUser, files.ToList()), _mareDbContext);
return Ok(); return Ok();
} }
catch (OperationCanceledException) { return BadRequest(); } catch (OperationCanceledException) { return BadRequest(); }

View File

@@ -16,7 +16,6 @@ public class RequestQueueService : IHostedService
private record PriorityEntry(bool IsHighPriority, DateTime LastChecked); private record PriorityEntry(bool IsHighPriority, DateTime LastChecked);
private readonly IHubContext<MareSynchronosServer.Hubs.MareHub> _hubContext; private readonly IHubContext<MareSynchronosServer.Hubs.MareHub> _hubContext;
private readonly MareDbContext _mareDbContext;
private readonly ILogger<RequestQueueService> _logger; private readonly ILogger<RequestQueueService> _logger;
private readonly MareMetrics _metrics; private readonly MareMetrics _metrics;
private readonly ConcurrentQueue<UserRequest> _queue = new(); private readonly ConcurrentQueue<UserRequest> _queue = new();
@@ -32,7 +31,7 @@ public class RequestQueueService : IHostedService
private System.Timers.Timer _queueTimer; private System.Timers.Timer _queueTimer;
public RequestQueueService(MareMetrics metrics, IConfigurationService<StaticFilesServerConfiguration> configurationService, public RequestQueueService(MareMetrics metrics, IConfigurationService<StaticFilesServerConfiguration> configurationService,
ILogger<RequestQueueService> logger, IHubContext<MareSynchronosServer.Hubs.MareHub> hubContext, MareDbContext mareDbContext) ILogger<RequestQueueService> logger, IHubContext<MareSynchronosServer.Hubs.MareHub> hubContext)
{ {
_userQueueRequests = new UserQueueEntry[configurationService.GetValueOrDefault(nameof(StaticFilesServerConfiguration.DownloadQueueSize), 50)]; _userQueueRequests = new UserQueueEntry[configurationService.GetValueOrDefault(nameof(StaticFilesServerConfiguration.DownloadQueueSize), 50)];
_queueExpirationSeconds = configurationService.GetValueOrDefault(nameof(StaticFilesServerConfiguration.DownloadTimeoutSeconds), 5); _queueExpirationSeconds = configurationService.GetValueOrDefault(nameof(StaticFilesServerConfiguration.DownloadTimeoutSeconds), 5);
@@ -41,7 +40,6 @@ public class RequestQueueService : IHostedService
_metrics = metrics; _metrics = metrics;
_logger = logger; _logger = logger;
_hubContext = hubContext; _hubContext = hubContext;
_mareDbContext = mareDbContext;
} }
public void ActivateRequest(Guid request) public void ActivateRequest(Guid request)
@@ -51,16 +49,16 @@ public class RequestQueueService : IHostedService
req.MarkActive(); req.MarkActive();
} }
private async Task<bool> IsHighPriority(string uid) private async Task<bool> IsHighPriority(string uid, MareDbContext mareDbContext)
{ {
return false; return false;
} }
public async Task EnqueueUser(UserRequest request) public async Task EnqueueUser(UserRequest request, MareDbContext mareDbContext)
{ {
_logger.LogDebug("Enqueueing req {guid} from {user} for {file}", request.RequestId, request.User, string.Join(", ", request.FileIds)); _logger.LogDebug("Enqueueing req {guid} from {user} for {file}", request.RequestId, request.User, string.Join(", ", request.FileIds));
bool isPriorityQueue = await IsHighPriority(request.User).ConfigureAwait(false); bool isPriorityQueue = await IsHighPriority(request.User, mareDbContext).ConfigureAwait(false);
if (_queueProcessingSemaphore.CurrentCount == 0) if (_queueProcessingSemaphore.CurrentCount == 0)
{ {
@@ -139,9 +137,9 @@ public class RequestQueueService : IHostedService
return Task.CompletedTask; return Task.CompletedTask;
} }
public async Task<bool> StillEnqueued(Guid request, string user) public async Task<bool> StillEnqueued(Guid request, string user, MareDbContext mareDbContext)
{ {
bool isPriorityQueue = await IsHighPriority(user).ConfigureAwait(false); bool isPriorityQueue = await IsHighPriority(user, mareDbContext).ConfigureAwait(false);
if (isPriorityQueue) if (isPriorityQueue)
{ {
return _priorityQueue.Any(c => c.RequestId == request && string.Equals(c.User, user, StringComparison.Ordinal)); return _priorityQueue.Any(c => c.RequestId == request && string.Equals(c.User, user, StringComparison.Ordinal));