using Docker.DotNet; using Docker.DotNet.Models; using Salmon.Core; using Salmon.Model.Monitor; namespace Salmon.Service.Watchers; public class Docker : Base { public string Uri { get; set; } public string Name { get; set; } public List Containers { get; set; } = new List(); public override async Task> ForgeElements() { List elements = new(); DockerClient client = new DockerClientConfiguration( new Uri(Uri)) .CreateClient(); var listedContainers = await client.Containers.ListContainersAsync(new global::Docker.DotNet.Models.ContainersListParameters { All = true }); foreach (var i in Containers) elements.Add(i.FromResponses(Uri, listedContainers)); return elements; } } public class DockerContainer : Base { public string ContainerName { get; set; } public override Task> ForgeElements() { // Implement later with Single... Not very efficient. throw new NotImplementedException(); } public Element FromResponses(string uri, IList responses) { Container ret = new(UniqueId ?? Helper.CreateIdFrom(uri, ContainerName)) { Joinable = false }; foreach (var r in responses) if(r.Names.Contains(ContainerName)) { ret.Joinable = true; ret.Running = r.State == "running"; ret.ContainerId = r.ID; ret.ContainerStatus = r.Status; ret.Image = r.Image; ret.ImageId = r.ImageID; break; } ApplyField(ret); return ret; } }