Started adding node-daemon communication. Added status endpoint
This commit is contained in:
22
MoonlightServers.ApiServer/Extensions/NodeExtensions.cs
Normal file
22
MoonlightServers.ApiServer/Extensions/NodeExtensions.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using MoonCore.Helpers;
|
||||
using MoonlightServers.ApiServer.Database.Entities;
|
||||
|
||||
namespace MoonlightServers.ApiServer.Extensions;
|
||||
|
||||
public static class NodeExtensions
|
||||
{
|
||||
public static HttpApiClient CreateClient(this Node node)
|
||||
{
|
||||
var httpClient = new HttpClient(new HttpClientHandler() // TODO: Make global http config for proxy etc
|
||||
{
|
||||
UseProxy = false
|
||||
});
|
||||
|
||||
var url = $"{(node.SslEnabled ? "https" : "http")}://{node.Fqdn}:{node.ApiPort}/";
|
||||
httpClient.BaseAddress = new Uri(url);
|
||||
|
||||
httpClient.DefaultRequestHeaders.Add("Authorization", node.Token);
|
||||
|
||||
return new HttpApiClient(httpClient);
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,9 @@ using MoonCore.Helpers;
|
||||
using Moonlight.ApiServer.App.Attributes;
|
||||
using Moonlight.ApiServer.App.Exceptions;
|
||||
using Moonlight.ApiServer.App.Helpers;
|
||||
using MoonlightServers.DaemonShared.Http.Resources.Sys;
|
||||
using MoonlightServers.ApiServer.Database.Entities;
|
||||
using MoonlightServers.ApiServer.Extensions;
|
||||
using MoonlightServers.Shared.Http.Requests.Admin.Nodes;
|
||||
using MoonlightServers.Shared.Http.Responses.Admin.Nodes;
|
||||
|
||||
@@ -14,7 +16,7 @@ namespace MoonlightServers.ApiServer.Http.Controllers.Admin.Nodes;
|
||||
[ApiController]
|
||||
[Route("admin/servers/nodes")]
|
||||
public class NodesController : BaseCrudController<Node, DetailNodeResponse, CreateNodeRequest, DetailNodeResponse, UpdateNodeRequest, DetailNodeResponse>
|
||||
{
|
||||
{
|
||||
public NodesController(DatabaseRepository<Node> itemRepository) : base(itemRepository)
|
||||
{
|
||||
PermissionPrefix = "admin.servers.nodes";
|
||||
@@ -49,6 +51,21 @@ public class NodesController : BaseCrudController<Node, DetailNodeResponse, Crea
|
||||
return Ok(Mapper.Map<DetailNodeResponse>(item));
|
||||
}
|
||||
|
||||
[HttpGet("{id}/status")]
|
||||
[RequirePermission("admin.servers.nodes.status")]
|
||||
public async Task<ActionResult<StatusNodeResponse>> Status(int id)
|
||||
{
|
||||
var node = LoadItemById(id);
|
||||
|
||||
using var httpClient = node.CreateClient();
|
||||
|
||||
var response = await httpClient.GetJson<SystemInfoResponse>("system/info");
|
||||
|
||||
var result = Mapper.Map<StatusNodeResponse>(response);
|
||||
|
||||
return Ok(result);
|
||||
}
|
||||
|
||||
private void ValidateFqdn(string fqdn, bool ssl)
|
||||
{
|
||||
if (ssl)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MoonCore" Version="1.5.3" />
|
||||
<PackageReference Include="MoonCore" Version="1.5.4" />
|
||||
<PackageReference Include="MoonCore.Extended" Version="1.0.2" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.2" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" />
|
||||
|
||||
Reference in New Issue
Block a user