Added command line options parsing and possibility to override config

This commit is contained in:
ftc
2021-01-06 17:19:54 +03:00
parent bbb0f9c63e
commit 5bbfd1ea3d
2 changed files with 31 additions and 10 deletions
+1
View File
@@ -10,6 +10,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="ini-parser" Version="2.5.2" /> <PackageReference Include="ini-parser" Version="2.5.2" />
<PackageReference Include="NLog" Version="4.7.4" /> <PackageReference Include="NLog" Version="4.7.4" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20574.7" />
</ItemGroup> </ItemGroup>
</Project> </Project>
+30 -10
View File
@@ -1,6 +1,9 @@
using IniParser; using IniParser;
using NLog; using NLog;
using System.Collections.Generic; using System.Collections.Generic;
using System.CommandLine;
using System.CommandLine.Invocation;
using System.Globalization;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
@@ -16,16 +19,33 @@ namespace Barsik
static void Main(string[] args) static void Main(string[] args)
{ {
Logging.Setup(); CultureInfo.CurrentCulture = new CultureInfo("en-US");
logger.Info("Barsik monitoring service starting"); var rootCommand = new RootCommand();
var runCommand = new Command("run")
{
new Option<string>("--config", () => "", "Path to configuration file")
};
runCommand.Handler = CommandHandler.Create<string>(RunService);
rootCommand.AddCommand(runCommand);
rootCommand.InvokeAsync(args).Wait();
}
registers = new RegistersContainer(); static void RunService(string configPath)
var server = new ModbusServer(registers); {
Logging.Setup();
logger.Info("Barsik monitoring service starting");
registers = new RegistersContainer();
var server = new ModbusServer(registers);
units = new List<BaseMonitoringUnit>(); units = new List<BaseMonitoringUnit>();
var configParser = new FileIniDataParser(); var configParser = new FileIniDataParser();
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); if (string.IsNullOrEmpty(configPath))
var data = configParser.ReadFile(Path.Combine(assemblyFolder, "barsik.ini")); {
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
configPath = Path.Combine(assemblyFolder, "barsik.ini");
}
var data = configParser.ReadFile(configPath);
foreach (var section in data.Sections) foreach (var section in data.Sections)
{ {
if (section.SectionName.StartsWith("Unit")) if (section.SectionName.StartsWith("Unit"))
@@ -39,10 +59,10 @@ namespace Barsik
} }
} }
} }
logger.Info("Configuration loaded, we have " + units.Count + " units"); logger.Info("Configuration loaded, we have " + units.Count + " units");
server.Port = int.Parse(data["Server"]["Port"]); server.Port = int.Parse(data["Server"]["Port"]);
server.Run(); server.Run();
logger.Info("Exiting"); logger.Info("Exiting");
} }
} }
} }