From fd76a085dc4b981e61fe47755d958f6750628e59 Mon Sep 17 00:00:00 2001 From: Moritz Deiaco Date: Wed, 29 May 2024 18:19:35 +0200 Subject: [PATCH] Added a cool node status card onto the admin dashboard --- .../UI/Admin/AdminComponents/NodeOverview.cs | 20 ++++++ Moonlight/Features/Servers/ServersFeature.cs | 3 + .../Cards/AdminNodesComponent.razor | 62 +++++++++++++++++++ Moonlight/Moonlight.csproj | 1 - 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 Moonlight/Features/Servers/Implementations/UI/Admin/AdminComponents/NodeOverview.cs create mode 100644 Moonlight/Features/Servers/UI/Components/Cards/AdminNodesComponent.razor diff --git a/Moonlight/Features/Servers/Implementations/UI/Admin/AdminComponents/NodeOverview.cs b/Moonlight/Features/Servers/Implementations/UI/Admin/AdminComponents/NodeOverview.cs new file mode 100644 index 00000000..cd5116c8 --- /dev/null +++ b/Moonlight/Features/Servers/Implementations/UI/Admin/AdminComponents/NodeOverview.cs @@ -0,0 +1,20 @@ +using MoonCoreUI.Helpers; +using Moonlight.Core.Interfaces.Ui.Admin; +using Moonlight.Core.Models.Abstractions; +using Moonlight.Features.Servers.UI.Components.Cards; + +namespace Moonlight.Features.Servers.Implementations.UI.Admin.AdminComponents; + +public class NodeOverview : IAdminDashboardComponent +{ + public Task Get() + { + var res = new UiComponent() + { + Component = ComponentHelper.FromType(), + RequiredPermissionLevel = 5001 + }; + + return Task.FromResult(res); + } +} \ No newline at end of file diff --git a/Moonlight/Features/Servers/ServersFeature.cs b/Moonlight/Features/Servers/ServersFeature.cs index 3c3da663..89956ee5 100644 --- a/Moonlight/Features/Servers/ServersFeature.cs +++ b/Moonlight/Features/Servers/ServersFeature.cs @@ -10,6 +10,7 @@ using Moonlight.Features.Servers.Configuration; using Moonlight.Features.Servers.Http.Middleware; using Moonlight.Features.Servers.Implementations.Diagnose; using Moonlight.Features.Servers.Implementations.UI.Admin.AdminColumns; +using Moonlight.Features.Servers.Implementations.UI.Admin.AdminComponents; using Moonlight.Features.Servers.Models.Enums; using Moonlight.Features.Servers.Services; using Moonlight.Features.Servers.UI.Components.Cards; @@ -100,6 +101,8 @@ public class ServersFeature : MoonlightFeature await pluginService.RegisterImplementation(new NodesDiagnoseAction()); await pluginService.RegisterImplementation(new ServerCount()); + + await pluginService.RegisterImplementation(new NodeOverview()); } public override Task OnUiInitialized(UiInitContext context) diff --git a/Moonlight/Features/Servers/UI/Components/Cards/AdminNodesComponent.razor b/Moonlight/Features/Servers/UI/Components/Cards/AdminNodesComponent.razor new file mode 100644 index 00000000..c15c218a --- /dev/null +++ b/Moonlight/Features/Servers/UI/Components/Cards/AdminNodesComponent.razor @@ -0,0 +1,62 @@ +@using MoonCore.Abstractions +@using Moonlight.Features.Servers.Api.Resources +@using Moonlight.Features.Servers.Entities +@using Moonlight.Features.Servers.Services + +@inject NodeService NodeService +@inject Repository NodeRepository + +
+
+

Nodes Overview

+
+
+ @if (Nodes.Any()) + { + foreach (var node in Nodes) + { +
+
+ + @(node.Item2 == null ? "offline" : "online") + +
+ @node.Item1.Name + @node.Item1.Fqdn +
+
+
+ } + } + else + { + You dont have any nodes. + } +
+
+
+ +@code { + + private List> Nodes = new(); + + protected override async Task OnInitializedAsync() + { + foreach (var node in NodeRepository.Get().ToList()) + { + SystemStatus? nodeStatus = null; + + try + { + nodeStatus = await NodeService.GetStatus(node); + } + catch (Exception e) + { + // Ignored + } + + Nodes.Add(new Tuple(node, nodeStatus)); + } + } + +} \ No newline at end of file diff --git a/Moonlight/Moonlight.csproj b/Moonlight/Moonlight.csproj index baf8e518..74ddc115 100644 --- a/Moonlight/Moonlight.csproj +++ b/Moonlight/Moonlight.csproj @@ -74,7 +74,6 @@ -