Added /status route to get current counts. closes #19
This commit is contained in:
parent
61a4140b6e
commit
a4f314a7b1
|
@ -0,0 +1,24 @@
|
||||||
|
using AccessQueueService.Models;
|
||||||
|
using AccessQueueService.Services;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace AccessQueueService.Controllers
|
||||||
|
{
|
||||||
|
[ApiController]
|
||||||
|
[Route("status")]
|
||||||
|
public class StatusController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly IAccessService _accessService;
|
||||||
|
|
||||||
|
public StatusController(IAccessService accessService)
|
||||||
|
{
|
||||||
|
_accessService = accessService;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public ActionResult<AccessQueueStatus> GetStatus()
|
||||||
|
{
|
||||||
|
return Ok(_accessService.Status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
using AccessQueueService.Data;
|
||||||
|
|
||||||
|
namespace AccessQueueService.Models
|
||||||
|
{
|
||||||
|
public class AccessQueueStatus
|
||||||
|
{
|
||||||
|
public int UnexpiredTicketsCount { get; internal set; }
|
||||||
|
public int ActiveTicketsCount { get; internal set; }
|
||||||
|
public int QueueCount { get; internal set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -41,6 +41,13 @@ namespace AccessQueueService.Services
|
||||||
public int UnexpiredTicketsCount => _accessQueueRepo.GetUnexpiredTicketsCount();
|
public int UnexpiredTicketsCount => _accessQueueRepo.GetUnexpiredTicketsCount();
|
||||||
public int ActiveTicketsCount => _accessQueueRepo.GetActiveTicketsCount(DateTime.UtcNow.AddSeconds(-_config.ActivitySeconds.Value));
|
public int ActiveTicketsCount => _accessQueueRepo.GetActiveTicketsCount(DateTime.UtcNow.AddSeconds(-_config.ActivitySeconds.Value));
|
||||||
public int QueueCount => _accessQueueRepo.GetQueueCount();
|
public int QueueCount => _accessQueueRepo.GetQueueCount();
|
||||||
|
public AccessQueueStatus Status => new()
|
||||||
|
{
|
||||||
|
ActiveTicketsCount = this.ActiveTicketsCount,
|
||||||
|
QueueCount = this.QueueCount,
|
||||||
|
UnexpiredTicketsCount = this.UnexpiredTicketsCount,
|
||||||
|
};
|
||||||
|
|
||||||
public async Task<AccessResponse> RequestAccess(string userId)
|
public async Task<AccessResponse> RequestAccess(string userId)
|
||||||
{
|
{
|
||||||
await _queueLock.WaitAsync();
|
await _queueLock.WaitAsync();
|
||||||
|
|
|
@ -10,5 +10,6 @@ namespace AccessQueueService.Services
|
||||||
public AccessQueueConfig GetConfiguration();
|
public AccessQueueConfig GetConfiguration();
|
||||||
public void UpdateConfiguration(AccessQueueConfig config);
|
public void UpdateConfiguration(AccessQueueConfig config);
|
||||||
public void PatchConfiguration(AccessQueueConfig partialConfig);
|
public void PatchConfiguration(AccessQueueConfig partialConfig);
|
||||||
|
public AccessQueueStatus Status { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace AccessQueueServiceTests
|
||||||
const int ACT_SECONDS = 1;
|
const int ACT_SECONDS = 1;
|
||||||
const int ACT_MILLIS = 1000 * ACT_SECONDS;
|
const int ACT_MILLIS = 1000 * ACT_SECONDS;
|
||||||
const int CAP_LIMIT = 5;
|
const int CAP_LIMIT = 5;
|
||||||
const int BULK_COUNT = 50000;
|
const int BULK_COUNT = 10000;
|
||||||
private readonly AccessService _accessService;
|
private readonly AccessService _accessService;
|
||||||
|
|
||||||
public AccessServiceTests()
|
public AccessServiceTests()
|
||||||
|
@ -272,6 +272,26 @@ namespace AccessQueueServiceTests
|
||||||
Assert.Equal(2, response3.RequestsAhead);
|
Assert.Equal(2, response3.RequestsAhead);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Status_ShouldReturnCorrectCounts()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Fill up the queue to force a user into the queue
|
||||||
|
for (int i = 0; i < CAP_LIMIT; i++)
|
||||||
|
{
|
||||||
|
await _accessService.RequestAccess(Guid.NewGuid().ToString());
|
||||||
|
}
|
||||||
|
// Add an additional user
|
||||||
|
await _accessService.RequestAccess("user");
|
||||||
|
|
||||||
|
var status = _accessService.Status;
|
||||||
|
|
||||||
|
Assert.NotNull(status);
|
||||||
|
Assert.Equal(CAP_LIMIT, status.UnexpiredTicketsCount);
|
||||||
|
Assert.Equal(CAP_LIMIT, status.ActiveTicketsCount);
|
||||||
|
Assert.Equal(1, status.QueueCount);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue