Started adding node-daemon communication. Added status endpoint

This commit is contained in:
=
2024-09-06 13:53:41 +00:00
parent 66e0fa2283
commit 6d4e1cdaaf
11 changed files with 144 additions and 24 deletions

View 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);
}
}

View File

@@ -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)

View File

@@ -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" />