diff --git a/Moonlight/App/Models/Misc/RunningServer.cs b/Moonlight/App/Models/Misc/RunningServer.cs new file mode 100644 index 00000000..3b00c257 --- /dev/null +++ b/Moonlight/App/Models/Misc/RunningServer.cs @@ -0,0 +1,10 @@ +using Moonlight.App.ApiClients.Daemon.Resources; +using Moonlight.App.Database.Entities; + +namespace Moonlight.App.Models.Misc; + +public class RunningServer +{ + public Server Server { get; set; } + public ContainerStats.Container Container { get; set; } +} \ No newline at end of file diff --git a/Moonlight/Shared/Views/Admin/Servers/Manager.razor b/Moonlight/Shared/Views/Admin/Servers/Manager.razor index e399974b..c311343a 100644 --- a/Moonlight/Shared/Views/Admin/Servers/Manager.razor +++ b/Moonlight/Shared/Views/Admin/Servers/Manager.razor @@ -9,6 +9,7 @@ @using Moonlight.App.ApiClients.Daemon.Resources @using Moonlight.App.ApiClients.Wings @using Moonlight.App.Helpers +@using Moonlight.App.Models.Misc @inject NodeRepository NodeRepository @inject NodeService NodeService @@ -23,7 +24,7 @@ + OnClick="() => Task.Run(Scan)"> - -
-
- - - - - - - - - - - - - - - - - - - - -
-
+
+
+ @if (IsRunning) + { +

Currently scanning: @(Node?.Name)

+ } + else + { + Scan complete + }
- +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
@code { - private LazyLoader LazyLoader; + private List RunningServers = new(); + private bool IsRunning; + private Node? Node; - private Dictionary Containers = new(); - - private async Task Load(LazyLoader lazyLoader) + protected override async Task OnAfterRenderAsync(bool firstRender) { - Containers.Clear(); - - foreach (var node in NodeRepository.Get().ToArray()) + if (firstRender) { - await lazyLoader.SetText(node.Name); + await Task.Run(Scan); + } + } + + private async Task Scan() + { + IsRunning = true; + RunningServers.Clear(); + + await InvokeAsync(StateHasChanged); + + var nodes = NodeRepository.Get().ToArray(); + + Node = nodes.First(); + + foreach (var node in nodes) + { + Node = node; + + await InvokeAsync(StateHasChanged); try { @@ -111,20 +141,31 @@ var server = ServerRepository .Get() .Include(x => x.Owner) + .Include(x => x.Node) + .Include(x => x.Image) .FirstOrDefault(x => x.Uuid == uuid); if (server != null) { - Containers.Add(server, container); + RunningServers.Add(new() + { + Server = server, + Container = container + }); + + await InvokeAsync(StateHasChanged); } } } } catch (Exception) { - // ignored + // ignored } } + + IsRunning = false; + await InvokeAsync(StateHasChanged); } private async Task StopAll() @@ -138,9 +179,9 @@ if (b) { - foreach (var containerData in Containers) + foreach (var runningServer in RunningServers) { - await ServerService.SetPowerState(containerData.Key, PowerSignal.Stop); + await ServerService.SetPowerState(runningServer.Server, PowerSignal.Stop); } } } @@ -156,9 +197,9 @@ if (b) { - foreach (var containerData in Containers) + foreach (var runningServer in RunningServers) { - await ServerService.SetPowerState(containerData.Key, PowerSignal.Kill); + await ServerService.SetPowerState(runningServer.Server, PowerSignal.Kill); } } }