2025-01-23 07:49:52 -07:00

88 lines
3.2 KiB
C#

using MesaFabApproval.API.Services;
using MesaFabApproval.Shared.Models;
using MesaFabApproval.Shared.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace MesaFabApproval.API.Controllers;
[ApiController]
[Authorize]
public class ECNController : ControllerBase {
private readonly ILogger<ApprovalController> _logger;
private readonly IECNService _ecnService;
private readonly IMonInWorkerClient _monInClient;
public ECNController(ILogger<ApprovalController> logger, IECNService ecnService,
IMonInWorkerClient monInClient) {
_logger = logger ?? throw new ArgumentNullException("ILogger not injected");
_ecnService = ecnService ?? throw new ArgumentNullException("IECNService not injected");
_monInClient = monInClient ?? throw new ArgumentNullException("IMonInWorkerClient not injected");
}
[HttpGet]
[Route("ecn/isValidEcnNumber")]
public async Task<IActionResult> IsValidEcnNumber(int number) {
DateTime start = DateTime.Now;
bool isInternalError = false;
string errorMessage = "";
try {
_logger.LogInformation($"Attempting to determine if {number} is a valid ECN#");
if (number <= 0) return Ok(false);
bool isValid = await _ecnService.IsValidECNNumber(number);
return Ok(isValid);
} catch (Exception ex) {
isInternalError = true;
errorMessage = $"Cannot determine if {number} is a valid ECN#, because {ex.Message}";
return Problem(errorMessage);
} finally {
string metricName = "IsValidEcnNumber";
DateTime end = DateTime.Now;
double millisecondsDiff = (end - start).TotalMilliseconds;
_monInClient.PostAverage(metricName + "Latency", millisecondsDiff);
if (isInternalError) {
_logger.LogError(errorMessage);
_monInClient.PostStatus(metricName, StatusValue.Critical);
} else {
_monInClient.PostStatus(metricName, StatusValue.Ok);
}
}
}
[HttpGet]
[Route("ecn/allNumbers")]
public async Task<IActionResult> GetAllECNNumbers() {
DateTime start = DateTime.Now;
bool isInternalError = false;
string errorMessage = "";
try {
_logger.LogInformation($"Attempting to get all ECN#s");
IEnumerable<int> allEcnNumbers = await _ecnService.GetAllECNNumbers();
return Ok(allEcnNumbers);
} catch (Exception ex) {
isInternalError = true;
errorMessage = $"Cannot get all ECN#s, because {ex.Message}";
return Problem(errorMessage);
} finally {
string metricName = "GetAllECNNumbers";
DateTime end = DateTime.Now;
double millisecondsDiff = (end - start).TotalMilliseconds;
_monInClient.PostAverage(metricName + "Latency", millisecondsDiff);
if (isInternalError) {
_logger.LogError(errorMessage);
_monInClient.PostStatus(metricName, StatusValue.Critical);
} else {
_monInClient.PostStatus(metricName, StatusValue.Ok);
}
}
}
}