use maredbcontext from controller
This commit is contained in:
@@ -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(); }
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user