From 0d8cfaf4236d768e9fc5f705b032d99da6e09e2f Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Tue, 25 Mar 2025 20:48:19 -0500 Subject: [PATCH] Working control of Docker containers --- .../IServiceCollectionExtensions.cs | 6 ++-- .../ServerEngines/DockerServerEngine.cs | 29 ++++++++++++++----- .../UI/Pages/Servers/Edit/General.razor | 10 +++---- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs b/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs index c9104d9a..d556f82c 100644 --- a/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs +++ b/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs @@ -53,9 +53,11 @@ public static class IServiceCollectionExtensions services.AddScoped, ServerImporter>(); services.AddScoped, RedistributableImporter>(); - // Register server engine + // Register server engines services.AddSingleton(); - services.AddSingleton(); + + services.AddSingleton(); + services.AddSingleton(provider => provider.GetService()); services.AddSingleton(); diff --git a/LANCommander.Server.Services/ServerEngines/DockerServerEngine.cs b/LANCommander.Server.Services/ServerEngines/DockerServerEngine.cs index b2f9e05a..3426edbe 100644 --- a/LANCommander.Server.Services/ServerEngines/DockerServerEngine.cs +++ b/LANCommander.Server.Services/ServerEngines/DockerServerEngine.cs @@ -22,7 +22,7 @@ public class DockerServerEngine( { private ServerEngineConfiguration _config; private Dictionary _dockerClients = new(); - private Dictionary _tracked { get; set; } = new(); + private Dictionary _tracked { get; set; } = new(); public event EventHandler? OnServerStatusUpdate; public event EventHandler? OnServerLog; @@ -46,22 +46,32 @@ public class DockerServerEngine( foreach (var server in servers) { if (server.DockerHostId.HasValue && _dockerClients.ContainsKey(server.DockerHostId.Value)) - _tracked[server.Id] = (server.DockerHostId.Value, server.ContainerId); + _tracked[server.Id] = new DockerContainer + { + HostId = server.DockerHostId.Value, + Id = server.ContainerId, + Name = server.Name, + }; } } } - public async Task> GetContainersAsync(Guid dockerHostId) + public async Task> GetContainersAsync(Guid dockerHostId) { if (!_dockerClients.ContainsKey(dockerHostId)) - return Enumerable.Empty(); + return Enumerable.Empty(); var response = await _dockerClients[dockerHostId].Containers.ListContainersAsync(new ContainersListParameters() { All = true }); - return response; + return response.Where(i => i != null).Select(i => new DockerContainer + { + Id = i.ID, + HostId = dockerHostId, + Name = i.Names.FirstOrDefault() + }); } public bool IsManaging(Guid serverId) @@ -193,12 +203,17 @@ public class DockerServerEngine( if (String.IsNullOrWhiteSpace(server.ContainerId)) return ServerProcessStatus.Stopped; - _tracked[serverId] = (server.DockerHostId.Value, server.ContainerId); + _tracked[serverId] = new DockerContainer + { + Id = server.ContainerId, + HostId = server.DockerHostId.Value, + Name = server.Name, + }; } try { - var container = await _dockerClients[_tracked[serverId].HostId].Containers.InspectContainerAsync(_tracked[serverId].ContainerId); + var container = await _dockerClients[_tracked[serverId].HostId].Containers.InspectContainerAsync(_tracked[serverId].Id); if (container.State.Running) return ServerProcessStatus.Running; diff --git a/LANCommander.Server/UI/Pages/Servers/Edit/General.razor b/LANCommander.Server/UI/Pages/Servers/Edit/General.razor index a98b01d4..5944f17c 100644 --- a/LANCommander.Server/UI/Pages/Servers/Edit/General.razor +++ b/LANCommander.Server/UI/Pages/Servers/Edit/General.razor @@ -11,10 +11,10 @@ @using LANCommander.Server.UI.Pages.Servers.Components @inject ServerService ServerService @inject GameService GameService +@inject DockerServerEngine DockerServerEngine @inject NavigationManager NavigationManager @inject IMessageService MessageService @inject ILogger Logger -@inject IServiceProvider ServiceProvider @@ -89,7 +89,7 @@