using AIPlatform.Protocol.Entities;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Xml;
namespace aipagnt
{
class AgentConfig
{
///
/// Gets the working folder of this agent.
///
public static readonly string WorkingFolder;
///
/// Gets the hardware code of this agent.
///
public static readonly string HardwareCode;
///
/// Gets the ip address of this agent.
///
public static readonly string IpAddress;
public static readonly Dictionary PythonEnvs;
static AgentConfig()
{
PythonEnvs = new Dictionary();
InitializePythonExeFolder();
WorkingFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WorkingFolder");
if (!Directory.Exists(WorkingFolder))
{
Directory.CreateDirectory(WorkingFolder);
}
var adapter = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault();
if (adapter == null)
{
throw new InvalidOperationException("No network adapter");
}
HardwareCode = adapter.GetPhysicalAddress().ToString();
var address = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork);
IpAddress = address != null ? address.ToString() : string.Empty;
}
private static void InitializePythonExeFolder()
{
var configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.xml");
if (File.Exists(configFilePath))
{
var xmlDoucment = new XmlDataDocument();
xmlDoucment.Load(configFilePath);
if (xmlDoucment.DocumentElement == null || xmlDoucment.ChildNodes.Count < 0)
{
return;
}
var pythonEnvsElement = xmlDoucment.ChildNodes.OfType().FirstOrDefault(x => x.Name == "PythonEnvs");
if (pythonEnvsElement == null)
{
return;
}
foreach (var childNode in pythonEnvsElement.ChildNodes.OfType())
{
var env = childNode.GetAttribute("env");
var name = childNode.GetAttribute("name");
if (!string.IsNullOrEmpty(name))
{
switch (env.ToLower())
{
case "tensorflow":
PythonEnvs.Add(TrainScriptPackageFramework.Tensorflow, name);
break;
case "vinno_torch":
PythonEnvs.Add(TrainScriptPackageFramework.vinno_torch, name);
break;
case "cntk":
PythonEnvs.Add(TrainScriptPackageFramework.CNTK, name);
break;
case "vinno_torch_plus":
PythonEnvs.Add(TrainScriptPackageFramework.vinno_torch_plus, name);
break;
case "vinno_torch_premium":
PythonEnvs.Add(TrainScriptPackageFramework.vinno_torch_premium, name);
break;
}
}
}
}
}
}
}