From b9a1084d7a292a3e88676b70dcbb7eca8d10a930 Mon Sep 17 00:00:00 2001 From: Denis Denisov Date: Wed, 6 Jan 2021 17:54:56 +0300 Subject: [PATCH] Configuration now uses JSON. Fixed command line parsing --- Barsik.csproj | 3 +-- MDStatMonitoringUnit.cs | 6 +++--- MonitoringUnit.cs | 16 ++++++++-------- Program.cs | 24 +++++++++++++----------- SensorsMonitoringUnit.cs | 10 +++++----- barsik.ini.sample | 12 ------------ barsik.json.sample | 17 +++++++++++++++++ 7 files changed, 47 insertions(+), 41 deletions(-) delete mode 100644 barsik.ini.sample create mode 100644 barsik.json.sample diff --git a/Barsik.csproj b/Barsik.csproj index 7147de0..b0b65bf 100644 --- a/Barsik.csproj +++ b/Barsik.csproj @@ -2,13 +2,12 @@ Exe - netcoreapp2.1 + netcoreapp3.1 Barsik.Program - diff --git a/MDStatMonitoringUnit.cs b/MDStatMonitoringUnit.cs index 53ccbae..88182ef 100644 --- a/MDStatMonitoringUnit.cs +++ b/MDStatMonitoringUnit.cs @@ -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 /// class MDStatMonitoringUnit : BaseMonitoringUnit { - public MDStatMonitoringUnit(SectionData config, RegistersContainer registers) : base(config, registers) + public MDStatMonitoringUnit(JsonElement config, RegistersContainer registers) : base(config, registers) { } diff --git a/MonitoringUnit.cs b/MonitoringUnit.cs index 88c5f4c..23caff9 100644 --- a/MonitoringUnit.cs +++ b/MonitoringUnit.cs @@ -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); diff --git a/Program.cs b/Program.cs index acbed3f..aa7a99a 100644 --- a/Program.cs +++ b/Program.cs @@ -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(); - 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"); } diff --git a/SensorsMonitoringUnit.cs b/SensorsMonitoringUnit.cs index b5cd164..4c4fcca 100644 --- a/SensorsMonitoringUnit.cs +++ b/SensorsMonitoringUnit.cs @@ -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"); diff --git a/barsik.ini.sample b/barsik.ini.sample deleted file mode 100644 index 71280e9..0000000 --- a/barsik.ini.sample +++ /dev/null @@ -1,12 +0,0 @@ -[Server] -Port = 4500 - -[Unit_CPU] -Type = Sensors -BaseAddress = 1 -Multiplier = 100 -Cores = 2 - -[Unit_RAID] -Type = MDStat -BaseAddress = 3 diff --git a/barsik.json.sample b/barsik.json.sample new file mode 100644 index 0000000..694665f --- /dev/null +++ b/barsik.json.sample @@ -0,0 +1,17 @@ +{ + "Port": 4500, + "Units": [ + { + "Name": "CPU", + "Type": "Sensors", + "BaseAddress": 1, + "Multiplier": 100, + "Cores": 2 + }, + { + "Name": "RAID", + "Type": "MDStat", + "BaseAddress": 3 + } + ] +}