LockMachineHandler
parent
50cb5e80e2
commit
a97c8d9971
|
@ -0,0 +1,63 @@
|
||||||
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using NetworkResurrector.Agent.PublishedLanguage.Dto;
|
||||||
|
using NetworkResurrector.Agent.Wrapper.Services;
|
||||||
|
using NetworkResurrector.Api.Domain.Constants;
|
||||||
|
using NetworkResurrector.Api.Domain.Repositories;
|
||||||
|
using NetworkResurrector.Api.PublishedLanguage.Commands;
|
||||||
|
using NetworkResurrector.Api.PublishedLanguage.Events;
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NetworkResurrector.Api.Application.CommandHandlers
|
||||||
|
{
|
||||||
|
public class LockMachineHandler : IRequestHandler<LockMachine, MachineLocked>
|
||||||
|
{
|
||||||
|
private readonly ILogger<LockMachineHandler> _logger;
|
||||||
|
private readonly INetworkRepository _repository;
|
||||||
|
private readonly IResurrectorAgentService _resurrectorAgentService;
|
||||||
|
private readonly IConfiguration _configuration;
|
||||||
|
|
||||||
|
public LockMachineHandler(ILogger<LockMachineHandler> logger, INetworkRepository repository, IResurrectorAgentService resurrectorAgentService, IConfiguration configuration)
|
||||||
|
{
|
||||||
|
_logger=logger;
|
||||||
|
_repository=repository;
|
||||||
|
_resurrectorAgentService=resurrectorAgentService;
|
||||||
|
_configuration=configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<MachineLocked> Handle(LockMachine command, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
_logger.LogDebug($"Start locking machine {command.MachineId}");
|
||||||
|
var machine = await _repository.GetMachine(command.MachineId);
|
||||||
|
var powerConfiguration = await _repository.GetPowerActionConfiguration(command.MachineId, PowerActions.LOCK);
|
||||||
|
|
||||||
|
//log activity
|
||||||
|
|
||||||
|
var ipAddressOrMachineName = machine.IPv4Address ?? machine.MachineName;
|
||||||
|
MachineLocked result;
|
||||||
|
|
||||||
|
switch (powerConfiguration.Performer.PerformerCode)
|
||||||
|
{
|
||||||
|
case PowerActionPerformers.NETWORK_RESURRECTOR_AGENT:
|
||||||
|
if (machine.Agent == null)
|
||||||
|
throw new Exception($"Cannot use network resurrector agent as lock performer for machine '{ipAddressOrMachineName}' because it is not configured.");
|
||||||
|
|
||||||
|
var owner = new ActionOwner(_configuration.GetValue<string>("Service:Code"));
|
||||||
|
var lockResultByAgent = await _resurrectorAgentService.Lock(ipAddressOrMachineName, machine.Agent.AgentPort, owner);
|
||||||
|
var status = lockResultByAgent.Success ? $"Machine '{ipAddressOrMachineName}' successfully locked." : $"Machine '{ipAddressOrMachineName}' could not be locked.";
|
||||||
|
result = new MachineLocked(lockResultByAgent.Success, status);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Exception($"Power action performer {powerConfiguration.Performer.PerformerCode} is not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogDebug($"Machine {command.MachineId} locking finished. Success: {result.Success}; Status: {result.Status}");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
using NDB.Application.DataContracts;
|
||||||
|
using NetworkResurrector.Api.PublishedLanguage.Events;
|
||||||
|
|
||||||
|
namespace NetworkResurrector.Api.PublishedLanguage.Commands
|
||||||
|
{
|
||||||
|
public class LockMachine : Command<MachineLocked>
|
||||||
|
{
|
||||||
|
public int MachineId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
namespace NetworkResurrector.Api.PublishedLanguage.Events
|
||||||
|
{
|
||||||
|
public record MachineLocked(bool Success, string Status);
|
||||||
|
}
|
|
@ -52,5 +52,12 @@ namespace NetworkResurrector.Api.Controllers
|
||||||
var result = await _mediator.Send(sleepMachine);
|
var result = await _mediator.Send(sleepMachine);
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost("lock")]
|
||||||
|
public async Task<IActionResult> LockMachine([FromBody] LockMachine lockMachine)
|
||||||
|
{
|
||||||
|
var result = await _mediator.Send(lockMachine);
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue