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 ActiveTicketsCount => _accessQueueRepo.GetActiveTicketsCount(DateTime.UtcNow.AddSeconds(-_config.ActivitySeconds.Value));
|
||||
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)
|
||||
{
|
||||
await _queueLock.WaitAsync();
|
||||
|
|
|
@ -10,5 +10,6 @@ namespace AccessQueueService.Services
|
|||
public AccessQueueConfig GetConfiguration();
|
||||
public void UpdateConfiguration(AccessQueueConfig config);
|
||||
public void PatchConfiguration(AccessQueueConfig partialConfig);
|
||||
public AccessQueueStatus Status { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace AccessQueueServiceTests
|
|||
const int ACT_SECONDS = 1;
|
||||
const int ACT_MILLIS = 1000 * ACT_SECONDS;
|
||||
const int CAP_LIMIT = 5;
|
||||
const int BULK_COUNT = 50000;
|
||||
const int BULK_COUNT = 10000;
|
||||
private readonly AccessService _accessService;
|
||||
|
||||
public AccessServiceTests()
|
||||
|
@ -272,6 +272,26 @@ namespace AccessQueueServiceTests
|
|||
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