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; } } } } } } }