Configuration now uses JSON. Fixed command line parsing

This commit is contained in:
ftc
2021-01-06 17:54:56 +03:00
parent 5bbfd1ea3d
commit b9a1084d7a
7 changed files with 47 additions and 41 deletions
+1 -2
View File
@@ -2,13 +2,12 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>netcoreapp3.1</TargetFramework>
<ApplicationIcon />
<StartupObject>Barsik.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ini-parser" Version="2.5.2" />
<PackageReference Include="NLog" Version="4.7.4" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20574.7" />
</ItemGroup>
+3 -3
View File
@@ -1,8 +1,8 @@
using IniParser.Model;
using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.Json;
using System.Threading;
namespace Barsik
@@ -21,7 +21,7 @@ namespace Barsik
/// </summary>
class MDStatMonitoringUnit : BaseMonitoringUnit
{
public MDStatMonitoringUnit(SectionData config, RegistersContainer registers) : base(config, registers)
public MDStatMonitoringUnit(JsonElement config, RegistersContainer registers) : base(config, registers)
{
}
+8 -8
View File
@@ -1,29 +1,29 @@
using IniParser.Model;
using System;
using System;
using System.Text.Json;
namespace Barsik
{
class BaseMonitoringUnit
{
protected SectionData config;
protected JsonElement config;
protected RegistersContainer registers;
protected int baseAddress;
public BaseMonitoringUnit(SectionData config, RegistersContainer registers)
public BaseMonitoringUnit(JsonElement config, RegistersContainer registers)
{
this.config = config;
this.config = config.Clone();
this.registers = registers;
baseAddress = int.Parse(config.Keys["BaseAddress"]);
baseAddress = config.GetProperty("BaseAddress").GetInt32();
}
public virtual void Run()
{
}
public static BaseMonitoringUnit Create(SectionData config, RegistersContainer registers)
public static BaseMonitoringUnit Create(JsonElement config, RegistersContainer registers)
{
var type = config.Keys["Type"];
var type = config.GetProperty("Type").GetString();
if (type == "Sensors")
{
return new SensorsMonitoringUnit(config, registers);
+13 -11
View File
@@ -1,11 +1,11 @@
using IniParser;
using NLog;
using NLog;
using System.Collections.Generic;
using System.CommandLine;
using System.CommandLine.Invocation;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Text.Json;
using System.Threading;
namespace Barsik
@@ -30,7 +30,7 @@ namespace Barsik
rootCommand.InvokeAsync(args).Wait();
}
static void RunService(string configPath)
static void RunService(string config)
{
Logging.Setup();
logger.Info("Barsik monitoring service starting");
@@ -39,18 +39,20 @@ namespace Barsik
var server = new ModbusServer(registers);
units = new List<BaseMonitoringUnit>();
var configParser = new FileIniDataParser();
if (string.IsNullOrEmpty(configPath))
if (string.IsNullOrEmpty(config))
{
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
configPath = Path.Combine(assemblyFolder, "barsik.ini");
config = Path.Combine(assemblyFolder, "barsik.json");
}
var data = configParser.ReadFile(configPath);
foreach (var section in data.Sections)
string configStr = File.ReadAllText(config);
int port = 0;
using (JsonDocument doc = JsonDocument.Parse(configStr))
{
if (section.SectionName.StartsWith("Unit"))
var root = doc.RootElement;
port = root.GetProperty("Port").GetInt32();
foreach (var unitElement in root.GetProperty("Units").EnumerateArray())
{
var unit = BaseMonitoringUnit.Create(section, registers);
var unit = BaseMonitoringUnit.Create(unitElement, registers);
if (unit != null)
{
units.Add(unit);
@@ -60,7 +62,7 @@ namespace Barsik
}
}
logger.Info("Configuration loaded, we have " + units.Count + " units");
server.Port = int.Parse(data["Server"]["Port"]);
server.Port = port;
server.Run();
logger.Info("Exiting");
}
+5 -5
View File
@@ -1,5 +1,5 @@
using IniParser.Model;
using System;
using System;
using System.Text.Json;
using System.Threading;
namespace Barsik
@@ -12,14 +12,14 @@ namespace Barsik
{
const string CORE_STR = "Core{0} Temp:";
public SensorsMonitoringUnit(SectionData config, RegistersContainer registers) : base(config, registers)
public SensorsMonitoringUnit(JsonElement config, RegistersContainer registers) : base(config, registers)
{
}
public override void Run()
{
int cores = int.Parse(config.Keys["Cores"]);
var multiplier = float.Parse(config.Keys["Multiplier"]);
int cores = config.GetProperty("Cores").GetInt32();
var multiplier = config.GetProperty("Multiplier").GetDouble();
while (true)
{
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("sensors");
-12
View File
@@ -1,12 +0,0 @@
[Server]
Port = 4500
[Unit_CPU]
Type = Sensors
BaseAddress = 1
Multiplier = 100
Cores = 2
[Unit_RAID]
Type = MDStat
BaseAddress = 3
+17
View File
@@ -0,0 +1,17 @@
{
"Port": 4500,
"Units": [
{
"Name": "CPU",
"Type": "Sensors",
"BaseAddress": 1,
"Multiplier": 100,
"Cores": 2
},
{
"Name": "RAID",
"Type": "MDStat",
"BaseAddress": 3
}
]
}