68 lines
1.8 KiB
C#
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;
|
|
}
|
|
} |