90 lines
3.1 KiB
C#
90 lines
3.1 KiB
C#
using CodexDistTestCore.Marketplace;
|
|
|
|
namespace CodexDistTestCore
|
|
{
|
|
public class CodexNodeContainer
|
|
{
|
|
public CodexNodeContainer(string name, int servicePort, string servicePortName, int apiPort, string containerPortName, int discoveryPort, int listenPort, string dataDir, int metricsPort)
|
|
{
|
|
Name = name;
|
|
ServicePort = servicePort;
|
|
ServicePortName = servicePortName;
|
|
ApiPort = apiPort;
|
|
ContainerPortName = containerPortName;
|
|
DiscoveryPort = discoveryPort;
|
|
ListenPort = listenPort;
|
|
DataDir = dataDir;
|
|
MetricsPort = metricsPort;
|
|
}
|
|
|
|
public string Name { get; }
|
|
public int ServicePort { get; }
|
|
public string ServicePortName { get; }
|
|
public int ApiPort { get; }
|
|
public string ContainerPortName { get; }
|
|
public int DiscoveryPort { get; }
|
|
public int ListenPort { get; }
|
|
public string DataDir { get; }
|
|
public int MetricsPort { get; }
|
|
|
|
public GethCompanionNodeContainer? GethCompanionNodeContainer { get; set; } // :C
|
|
}
|
|
|
|
public class CodexGroupNumberSource
|
|
{
|
|
private readonly NumberSource codexNodeGroupNumberSource = new NumberSource(0);
|
|
private readonly NumberSource groupContainerNameSource = new NumberSource(1);
|
|
private readonly NumberSource servicePortSource = new NumberSource(30001);
|
|
|
|
public int GetNextCodexNodeGroupNumber()
|
|
{
|
|
return codexNodeGroupNumberSource.GetNextNumber();
|
|
}
|
|
|
|
public string GetNextServicePortName()
|
|
{
|
|
return $"node{groupContainerNameSource.GetNextNumber()}";
|
|
}
|
|
|
|
public int GetNextServicePort()
|
|
{
|
|
return servicePortSource.GetNextNumber();
|
|
}
|
|
}
|
|
|
|
public class CodexNodeContainerFactory
|
|
{
|
|
private readonly NumberSource containerNameSource = new NumberSource(1);
|
|
private readonly NumberSource codexPortSource = new NumberSource(8080);
|
|
private readonly CodexGroupNumberSource numberSource;
|
|
|
|
public CodexNodeContainerFactory(CodexGroupNumberSource numberSource)
|
|
{
|
|
this.numberSource = numberSource;
|
|
}
|
|
|
|
public CodexNodeContainer CreateNext(OfflineCodexNodes offline)
|
|
{
|
|
var n = containerNameSource.GetNextNumber();
|
|
return new CodexNodeContainer(
|
|
name: $"codex-node{n}",
|
|
servicePort: numberSource.GetNextServicePort(),
|
|
servicePortName: numberSource.GetNextServicePortName(),
|
|
apiPort: codexPortSource.GetNextNumber(),
|
|
containerPortName: $"api-{n}",
|
|
discoveryPort: codexPortSource.GetNextNumber(),
|
|
listenPort: codexPortSource.GetNextNumber(),
|
|
dataDir: $"datadir{n}",
|
|
metricsPort: GetMetricsPort(offline)
|
|
);
|
|
}
|
|
|
|
private int GetMetricsPort(OfflineCodexNodes offline)
|
|
{
|
|
if (offline.MetricsEnabled) return codexPortSource.GetNextNumber();
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
}
|