88 lines
3.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |