Salmon/Salmon.Service/Watchers/Docker.cs

68 lines
1.8 KiB
C#

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<DockerContainer> Containers { get; set; } = new List<DockerContainer>();
public override async Task<IEnumerable<Element>> ForgeElements()
{
List<Element> 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<IEnumerable<Element>> ForgeElements()
{
// Implement later with Single... Not very efficient.
throw new NotImplementedException();
}
public Element FromResponses(string uri, IList<ContainerListResponse> 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;
}
}