CorrelationManager

master
Tudor Stanciu 2022-01-18 14:58:24 +02:00
parent ef3d9c74e0
commit 1558165581
5 changed files with 31 additions and 11 deletions

View File

@ -1,6 +1,5 @@
using MediatR; using MediatR;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using NetworkResurrector.Api.Domain.Abstractions;
using NetworkResurrector.Api.Domain.Constants; using NetworkResurrector.Api.Domain.Constants;
using NetworkResurrector.Api.Domain.Repositories; using NetworkResurrector.Api.Domain.Repositories;
using NetworkResurrector.Api.PublishedLanguage.Commands; using NetworkResurrector.Api.PublishedLanguage.Commands;
@ -17,20 +16,16 @@ namespace NetworkResurrector.Api.Application.CommandHandlers
private readonly ILogger<PingMachineHandler> _logger; private readonly ILogger<PingMachineHandler> _logger;
private readonly IResurrectorService _resurrectorService; private readonly IResurrectorService _resurrectorService;
private readonly INetworkRepository _repository; private readonly INetworkRepository _repository;
private readonly IUserService _userService;
public PingMachineHandler(ILogger<PingMachineHandler> logger, IResurrectorService resurrectorService, INetworkRepository repository, IUserService userService) public PingMachineHandler(ILogger<PingMachineHandler> logger, IResurrectorService resurrectorService, INetworkRepository repository)
{ {
_logger=logger; _logger=logger;
_resurrectorService=resurrectorService; _resurrectorService=resurrectorService;
_repository=repository; _repository=repository;
_userService=userService;
} }
public async Task<MachinePinged> Handle(PingMachine command, CancellationToken cancellationToken) public async Task<MachinePinged> Handle(PingMachine command, CancellationToken cancellationToken)
{ {
var userId = _userService.GetUserId();
_logger.LogDebug($"Start pinging machine {command.MachineId}"); _logger.LogDebug($"Start pinging machine {command.MachineId}");
var machine = await _repository.GetMachine(command.MachineId); var machine = await _repository.GetMachine(command.MachineId);
var powerConfiguration = await _repository.GetPowerActionConfiguration(command.MachineId, PowerActions.PING); var powerConfiguration = await _repository.GetPowerActionConfiguration(command.MachineId, PowerActions.PING);

View File

@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using NetworkResurrector.Api.Application.Services;
namespace NetworkResurrector.Api.Application namespace NetworkResurrector.Api.Application
{ {
@ -6,6 +7,7 @@ namespace NetworkResurrector.Api.Application
{ {
public static void AddApplicationServices(this IServiceCollection services) public static void AddApplicationServices(this IServiceCollection services)
{ {
services.AddScoped<CorrelationManager>();
} }
} }
} }

View File

@ -0,0 +1,14 @@
using System;
namespace NetworkResurrector.Api.Application.Services
{
public class CorrelationManager
{
public Guid CorrelationId { get; }
public CorrelationManager()
{
CorrelationId=Guid.NewGuid();
}
}
}

View File

@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NetworkResurrector.Api.Application.Services;
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
@ -11,17 +12,27 @@ namespace NetworkResurrector.Api.Controllers
[ApiExplorerSettings(IgnoreApi = true)] [ApiExplorerSettings(IgnoreApi = true)]
public class ErrorsController : ControllerBase public class ErrorsController : ControllerBase
{ {
private readonly CorrelationManager _correlationManager;
public ErrorsController(CorrelationManager correlationManager)
{
_correlationManager=correlationManager;
}
internal record Error(int Status, string Title, Guid CorrelationId, string Message = null);
[Route("error")] [Route("error")]
public IActionResult HandleErrors() public IActionResult HandleErrors()
{ {
var correlationId = _correlationManager.CorrelationId;
var context = HttpContext.Features.Get<IExceptionHandlerFeature>(); var context = HttpContext.Features.Get<IExceptionHandlerFeature>();
var exception = context.Error; var exception = context.Error;
return exception switch return exception switch
{ {
ValidationException => StatusCode(StatusCodes.Status404NotFound, new { exception.Message }), ValidationException => StatusCode(StatusCodes.Status404NotFound, new Error(StatusCodes.Status404NotFound, "Internal server error", correlationId, exception.Message)),
UnauthorizedAccessException => StatusCode(StatusCodes.Status401Unauthorized, new { exception.Message }), UnauthorizedAccessException => StatusCode(StatusCodes.Status401Unauthorized, new Error(StatusCodes.Status401Unauthorized, "Internal server error", correlationId)),
_ => StatusCode(StatusCodes.Status500InternalServerError), _ => StatusCode(StatusCodes.Status500InternalServerError, new Error(StatusCodes.Status500InternalServerError, "Internal server error", correlationId)),
}; };
} }
} }

View File

@ -78,8 +78,6 @@ namespace NetworkResurrector.Api
app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseExceptionHandler("/error"); app.UseExceptionHandler("/error");
app.UseRouting(); app.UseRouting();
app.UseAuthentication(); app.UseAuthentication();
app.UseAuthorization(); app.UseAuthorization();