From ed66be3dd9c292dc9a8cc81486d27fdc33450a1e Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 14 May 2024 22:17:01 -0500 Subject: [PATCH 01/13] fix: LogError message forwards to LogMessage Console overload with ErrorLogLevel parameter also forwards directly to LogMessage and skips LogError method --- src/Pepperdash Core/Logging/Debug.cs | 39 ++++------------------------ 1 file changed, 5 insertions(+), 34 deletions(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index 1cf916a..5db28a6 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -187,7 +187,7 @@ namespace PepperDash.Core CrestronConsole.PrintLine(msg); - LogError(ErrorLogLevel.Notice, msg); + LogMessage(LogEventLevel.Information,msg); IncludedExcludedKeys = new Dictionary(); @@ -691,25 +691,8 @@ namespace PepperDash.Core [Obsolete("Use LogMessage methods")] public static void Console(uint level, IKeyed dev, ErrorLogLevel errorLogLevel, string format, params object[] items) - { - - var str = string.Format("[{0}] {1}", dev.Key, string.Format(format, items)); - if (errorLogLevel != ErrorLogLevel.None) - { - LogError(errorLogLevel, str); - } - + { LogMessage(level, dev, format, items); - - //var log = _logger.ForContext("Key", dev.Key); - //var message = string.Format(format, items); - - //log.Write((LogEventLevel)level, message); - - //if (Level >= level) - //{ - // Console(level, str); - //} } /// @@ -719,17 +702,7 @@ namespace PepperDash.Core public static void Console(uint level, ErrorLogLevel errorLogLevel, string format, params object[] items) { - var str = string.Format(format, items); - if (errorLogLevel != ErrorLogLevel.None) - { - LogError(errorLogLevel, str); - } - LogMessage(level, format, items); - //if (Level >= level) - //{ - // Console(level, str); - //} } /// @@ -770,18 +743,16 @@ namespace PepperDash.Core [Obsolete("Use LogMessage methods")] public static void LogError(ErrorLogLevel errorLogLevel, string str) { - - var msg = IsRunningOnAppliance ? string.Format("App {0}:{1}", InitialParametersClass.ApplicationNumber, str) : string.Format("Room {0}:{1}", InitialParametersClass.RoomId, str); switch (errorLogLevel) { case ErrorLogLevel.Error: - ErrorLog.Error(msg); + LogMessage(LogEventLevel.Error, str); break; case ErrorLogLevel.Warning: - ErrorLog.Warn(msg); + LogMessage(LogEventLevel.Warning, str); break; case ErrorLogLevel.Notice: - ErrorLog.Notice(msg); + LogMessage(LogEventLevel.Information, str); break; } } From 2e8edfc395c74362929f0803fb7aa3d27bfd4d61 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 14 May 2024 22:29:14 -0500 Subject: [PATCH 02/13] feat: add IKeyed extensions for logging --- .../Logging/DebugExtensions.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/Pepperdash Core/Logging/DebugExtensions.cs diff --git a/src/Pepperdash Core/Logging/DebugExtensions.cs b/src/Pepperdash Core/Logging/DebugExtensions.cs new file mode 100644 index 0000000..e37e6d9 --- /dev/null +++ b/src/Pepperdash Core/Logging/DebugExtensions.cs @@ -0,0 +1,39 @@ +using Serilog; +using Serilog.Events; +using Log = PepperDash.Core.Debug; + +namespace PepperDash.Core.Logging +{ + public static class DebugExtensions + { + public static void LogVerbose(this IKeyed device, string message, params object[] args) + { + Log.LogMessage(LogEventLevel.Verbose, device, message, args); + } + + public static void LogDebug(this IKeyed device, string message, params object[] args) + { + Log.LogMessage(LogEventLevel.Debug, device, message, args); + } + + public static void LogInformation(this IKeyed device, string message, params object[] args) + { + Log.LogMessage(LogEventLevel.Information, device, message, args); + } + + public static void LogWarning(this IKeyed device, string message, params object[] args) + { + Log.LogMessage(LogEventLevel.Warning, device, message, args); + } + + public static void LogError(this IKeyed device, string message, params object[] args) + { + Log.LogMessage(LogEventLevel.Error, device, message, args); + } + + public static void LogFatal(this IKeyed device, string message, params object[] args) + { + Log.LogMessage(LogEventLevel.Fatal, device, message, args); + } + } +} From 5bdd9e02bb0d6654edaf91611fa4b4936d81f7df Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 15:26:25 -0500 Subject: [PATCH 03/13] feat: Add enricher to automatically add App property to all messages This enricher can be enhanced in the future to add additional properties that we might want without affecting anything else. --- .../Logging/CrestronEnricher.cs | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/Pepperdash Core/Logging/CrestronEnricher.cs diff --git a/src/Pepperdash Core/Logging/CrestronEnricher.cs b/src/Pepperdash Core/Logging/CrestronEnricher.cs new file mode 100644 index 0000000..623530e --- /dev/null +++ b/src/Pepperdash Core/Logging/CrestronEnricher.cs @@ -0,0 +1,38 @@ +using Crestron.SimplSharp; +using Serilog.Core; +using Serilog.Events; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PepperDash.Core.Logging +{ + public class CrestronEnricher : ILogEventEnricher + { + static readonly string _appName; + + static CrestronEnricher() + { + if(CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance) + { + _appName = $"App {InitialParametersClass.ApplicationNumber}"; + return; + } + + if(CrestronEnvironment.DevicePlatform == eDevicePlatform.Server) + { + _appName = $"Room {InitialParametersClass.RoomId}"; + } + } + + + public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) + { + var property = propertyFactory.CreateProperty("App", _appName); + + logEvent.AddOrUpdateProperty(property); + } + } +} From ec2f8ffd927a83fb0997aa816fe1b918a231ae9a Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 15:26:41 -0500 Subject: [PATCH 04/13] fix: modify how messages are formatted --- src/Pepperdash Core/Logging/Debug.cs | 4 +++- src/Pepperdash Core/Logging/DebugConsoleSink.cs | 12 ++++++++++-- src/Pepperdash Core/PepperDash_Core.csproj | 3 ++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index 5db28a6..2c8ee1e 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -10,6 +10,7 @@ using Serilog.Core; using Serilog.Events; using Serilog.Formatting.Compact; using Serilog.Formatting.Json; +using Serilog.Templates; using System; using System.Collections.Generic; using System.Reflection; @@ -146,7 +147,8 @@ namespace PepperDash.Core _defaultLoggerConfiguration = new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.FromLogContext() - .WriteTo.Sink(new DebugConsoleSink(new JsonFormatter(renderMessage: true)), levelSwitch: _consoleLoggingLevelSwitch) + .Enrich.With(new CrestronEnricher()) + .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t][{@l}][{App}][{Key:3}]{@m}\n{@x}")), levelSwitch: _consoleLoggingLevelSwitch) .WriteTo.Sink(_websocketSink, levelSwitch: _websocketLoggingLevelSwitch) .WriteTo.Sink(new DebugErrorLogSink(), levelSwitch: _errorLogLevelSwitch) .WriteTo.File(new RenderedCompactJsonFormatter(), logFilePath, diff --git a/src/Pepperdash Core/Logging/DebugConsoleSink.cs b/src/Pepperdash Core/Logging/DebugConsoleSink.cs index 990d47b..a6c7f89 100644 --- a/src/Pepperdash Core/Logging/DebugConsoleSink.cs +++ b/src/Pepperdash Core/Logging/DebugConsoleSink.cs @@ -5,6 +5,8 @@ using Serilog.Core; using Serilog.Events; using Serilog.Formatting; using Serilog.Formatting.Json; +using System.IO; +using System.Text; namespace PepperDash.Core @@ -17,12 +19,18 @@ namespace PepperDash.Core { if (!Debug.IsRunningOnAppliance) return; - string message = $"[{logEvent.Timestamp}][{logEvent.Level}][App {InitialParametersClass.ApplicationNumber}]{logEvent.RenderMessage()}"; + /*string message = $"[{logEvent.Timestamp}][{logEvent.Level}][App {InitialParametersClass.ApplicationNumber}]{logEvent.RenderMessage()}"; if(logEvent.Properties.TryGetValue("Key",out var value) && value is ScalarValue sv && sv.Value is string rawValue) { message = $"[{logEvent.Timestamp}][{logEvent.Level}][App {InitialParametersClass.ApplicationNumber}][{rawValue,3}]: {logEvent.RenderMessage()}"; - } + }*/ + + var buffer = new StringWriter(new StringBuilder(256)); + + _textFormatter.Format(logEvent, buffer); + + var message = buffer.ToString(); CrestronConsole.PrintLine(message); } diff --git a/src/Pepperdash Core/PepperDash_Core.csproj b/src/Pepperdash Core/PepperDash_Core.csproj index 2da71dc..0e76202 100644 --- a/src/Pepperdash Core/PepperDash_Core.csproj +++ b/src/Pepperdash Core/PepperDash_Core.csproj @@ -35,8 +35,9 @@ + - + From 14e6aa4dc84125e56724f4aaee35def99c2c9657 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 15:38:06 -0500 Subject: [PATCH 05/13] fix: missing } --- src/Pepperdash Core/Logging/Debug.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index 2c8ee1e..3555df5 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -148,7 +148,7 @@ namespace PepperDash.Core .MinimumLevel.Verbose() .Enrich.FromLogContext() .Enrich.With(new CrestronEnricher()) - .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t][{@l}][{App}][{Key:3}]{@m}\n{@x}")), levelSwitch: _consoleLoggingLevelSwitch) + .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t}][{@l}][{App}][{Key:3}]{@m}\n{@x}")), levelSwitch: _consoleLoggingLevelSwitch) .WriteTo.Sink(_websocketSink, levelSwitch: _websocketLoggingLevelSwitch) .WriteTo.Sink(new DebugErrorLogSink(), levelSwitch: _errorLogLevelSwitch) .WriteTo.File(new RenderedCompactJsonFormatter(), logFilePath, From d7f57439c8ee9e7d13ff4cdf793ee66bb6e6d006 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 23:37:39 -0500 Subject: [PATCH 06/13] refactor: update log message format for console --- src/Pepperdash Core/Logging/Debug.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index 3555df5..a5e49f4 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -148,7 +148,7 @@ namespace PepperDash.Core .MinimumLevel.Verbose() .Enrich.FromLogContext() .Enrich.With(new CrestronEnricher()) - .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t}][{@l}][{App}][{Key:3}]{@m}\n{@x}")), levelSwitch: _consoleLoggingLevelSwitch) + .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}")), levelSwitch: _consoleLoggingLevelSwitch) .WriteTo.Sink(_websocketSink, levelSwitch: _websocketLoggingLevelSwitch) .WriteTo.Sink(new DebugErrorLogSink(), levelSwitch: _errorLogLevelSwitch) .WriteTo.File(new RenderedCompactJsonFormatter(), logFilePath, @@ -593,7 +593,7 @@ namespace PepperDash.Core /// Args to put into message template public static void LogMessage(Exception ex, string message, IKeyed device = null, params object[] args) { - using (LogContext.PushProperty("Key", device?.Key ?? string.Empty)) + using (LogContext.PushProperty("Key", device?.Key)) { _logger.Error(ex, message, args); } @@ -608,7 +608,7 @@ namespace PepperDash.Core /// Args to put into message template public static void LogMessage(LogEventLevel level, string message, IKeyed device=null, params object[] args) { - using (LogContext.PushProperty("Key", device?.Key ?? string.Empty)) + using (LogContext.PushProperty("Key", device?.Key)) { _logger.Write(level, message, args); } From e581eede56e93771ff821ca9e60e8df4a3579a05 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 23:42:31 -0500 Subject: [PATCH 07/13] fix: match error log & console formats --- src/Pepperdash Core/Logging/Debug.cs | 2 +- .../Logging/DebugErrorLogSink.cs | 35 +++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index a5e49f4..3f3defe 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -150,7 +150,7 @@ namespace PepperDash.Core .Enrich.With(new CrestronEnricher()) .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}")), levelSwitch: _consoleLoggingLevelSwitch) .WriteTo.Sink(_websocketSink, levelSwitch: _websocketLoggingLevelSwitch) - .WriteTo.Sink(new DebugErrorLogSink(), levelSwitch: _errorLogLevelSwitch) + .WriteTo.Sink(new DebugErrorLogSink(new ExpressionTemplate("[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}")), levelSwitch: _errorLogLevelSwitch) .WriteTo.File(new RenderedCompactJsonFormatter(), logFilePath, rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Debug, diff --git a/src/Pepperdash Core/Logging/DebugErrorLogSink.cs b/src/Pepperdash Core/Logging/DebugErrorLogSink.cs index b5bbb09..3885982 100644 --- a/src/Pepperdash Core/Logging/DebugErrorLogSink.cs +++ b/src/Pepperdash Core/Logging/DebugErrorLogSink.cs @@ -1,8 +1,10 @@ using Crestron.SimplSharp; using Serilog.Core; using Serilog.Events; +using Serilog.Formatting; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,6 +13,8 @@ namespace PepperDash.Core.Logging { public class DebugErrorLogSink : ILogEventSink { + private ITextFormatter _formatter; + private Dictionary> _errorLogMap = new Dictionary> { { LogEventLevel.Verbose, (msg) => ErrorLog.Notice(msg) }, @@ -22,15 +26,27 @@ namespace PepperDash.Core.Logging }; public void Emit(LogEvent logEvent) { - var programId = CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance - ? $"App {InitialParametersClass.ApplicationNumber}" - : $"Room {InitialParametersClass.RoomId}"; + string message; - string message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}]{logEvent.RenderMessage()}"; - - if (logEvent.Properties.TryGetValue("Key", out var value) && value is ScalarValue sv && sv.Value is string rawValue) + if (_formatter == null) { - message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}][{rawValue}]: {logEvent.RenderMessage()}"; + var programId = CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance + ? $"App {InitialParametersClass.ApplicationNumber}" + : $"Room {InitialParametersClass.RoomId}"; + + message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}]{logEvent.RenderMessage()}"; + + if (logEvent.Properties.TryGetValue("Key", out var value) && value is ScalarValue sv && sv.Value is string rawValue) + { + message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}][{rawValue}]: {logEvent.RenderMessage()}"; + } + } else + { + var buffer = new StringWriter(new StringBuilder(256)); + + _formatter.Format(logEvent, buffer); + + message = buffer.ToString(); } if(!_errorLogMap.TryGetValue(logEvent.Level, out var handler)) @@ -40,5 +56,10 @@ namespace PepperDash.Core.Logging handler(message); } + + public DebugErrorLogSink(ITextFormatter formatter = null) + { + _formatter = formatter; + } } } From e9be8c98a27db10fa05889874fd1f8f6820c30e0 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 23:54:09 -0500 Subject: [PATCH 08/13] refactor: remove `room` --- src/Pepperdash Core/Logging/CrestronEnricher.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Pepperdash Core/Logging/CrestronEnricher.cs b/src/Pepperdash Core/Logging/CrestronEnricher.cs index 623530e..902ce8d 100644 --- a/src/Pepperdash Core/Logging/CrestronEnricher.cs +++ b/src/Pepperdash Core/Logging/CrestronEnricher.cs @@ -15,15 +15,14 @@ namespace PepperDash.Core.Logging static CrestronEnricher() { - if(CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance) + switch (CrestronEnvironment.DevicePlatform) { - _appName = $"App {InitialParametersClass.ApplicationNumber}"; - return; - } - - if(CrestronEnvironment.DevicePlatform == eDevicePlatform.Server) - { - _appName = $"Room {InitialParametersClass.RoomId}"; + case eDevicePlatform.Appliance: + _appName = $"App {InitialParametersClass.ApplicationNumber}"; + break; + case eDevicePlatform.Server: + _appName = $"{InitialParametersClass.RoomId}"; + break; } } From fb3e9774c74b9edb8f00ad83f9083afe1f311d7b Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 23:54:34 -0500 Subject: [PATCH 09/13] fix: modify format for error log depending on environment --- src/Pepperdash Core/Logging/Debug.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index 3f3defe..f4b42e2 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -144,13 +144,17 @@ namespace PepperDash.Core CrestronConsole.PrintLine($"Saving log files to {logFilePath}"); + var errorLogTemplate = CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance + ? "{@t:fff}ms [{@l:u4}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}" + : "[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}"; + _defaultLoggerConfiguration = new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.FromLogContext() .Enrich.With(new CrestronEnricher()) .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}")), levelSwitch: _consoleLoggingLevelSwitch) .WriteTo.Sink(_websocketSink, levelSwitch: _websocketLoggingLevelSwitch) - .WriteTo.Sink(new DebugErrorLogSink(new ExpressionTemplate("[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}")), levelSwitch: _errorLogLevelSwitch) + .WriteTo.Sink(new DebugErrorLogSink(new ExpressionTemplate(errorLogTemplate)), levelSwitch: _errorLogLevelSwitch) .WriteTo.File(new RenderedCompactJsonFormatter(), logFilePath, rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Debug, From e9dcd1636acaa1fc93433739e1a3101e0afc4ac4 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Thu, 16 May 2024 00:02:47 -0500 Subject: [PATCH 10/13] build: update Crestron libraries --- src/Pepperdash Core/PepperDash_Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Pepperdash Core/PepperDash_Core.csproj b/src/Pepperdash Core/PepperDash_Core.csproj index 0e76202..933fa1d 100644 --- a/src/Pepperdash Core/PepperDash_Core.csproj +++ b/src/Pepperdash Core/PepperDash_Core.csproj @@ -33,7 +33,7 @@ - + From 706f10db9820ac0d617096d526aad048899ddcef Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Fri, 17 May 2024 11:11:14 -0500 Subject: [PATCH 11/13] fix: removed log to error for vc-4 from final method --- src/Pepperdash Core/Logging/Debug.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index f4b42e2..4e79a60 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -661,14 +661,6 @@ namespace PepperDash.Core LogMessage(level, format, items); - if (CrestronEnvironment.DevicePlatform == eDevicePlatform.Server) - { - var logString = string.Format("[level {0}] {1}", level, string.Format(format, items)); - - LogError(ErrorLogLevel.Notice, logString); - return; - } - //if (IsRunningOnAppliance) //{ // CrestronConsole.PrintLine("[{0}]App {1} Lvl {2}:{3}", DateTime.Now.ToString("HH:mm:ss.fff"), From b590bfe97b42c3f18dc1ada023a227bdf965eaa7 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 28 May 2024 13:19:45 -0500 Subject: [PATCH 12/13] fis: add json props to control properties config --- .../Comm/ControlPropertiesConfig.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs b/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs index f342f25..ae01560 100644 --- a/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs +++ b/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs @@ -1,6 +1,7 @@ using System; using Crestron.SimplSharp; using Newtonsoft.Json; +using Newtonsoft.Json.Converters; namespace PepperDash.Core { @@ -12,38 +13,44 @@ namespace PepperDash.Core /// /// The method of control /// + [JsonProperty("method")] + [JsonConverter(typeof(StringEnumConverter))] public eControlMethod Method { get; set; } /// /// The key of the device that contains the control port /// + [JsonProperty("controlPortDevKey")] public string ControlPortDevKey { get; set; } /// /// The number of the control port on the device specified by ControlPortDevKey /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] // In case "null" is present in config on this value + [JsonProperty("controlPortNumber", NullValueHandling = NullValueHandling.Ignore)] // In case "null" is present in config on this value public uint ControlPortNumber { get; set; } /// /// The name of the control port on the device specified by ControlPortDevKey /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] // In case "null" is present in config on this value + [JsonProperty("controlPortName", NullValueHandling = NullValueHandling.Ignore)] // In case "null" is present in config on this value public string ControlPortName { get; set; } /// /// Properties for ethernet based communications /// + [JsonProperty("tcpSshProperties")] public TcpSshPropertiesConfig TcpSshProperties { get; set; } /// /// The filename and path for the IR file /// + [JsonProperty("irFile")] public string IrFile { get; set; } /// /// The IpId of a Crestron device /// + [JsonProperty("ipId")] public string IpId { get; set; } /// @@ -55,21 +62,25 @@ namespace PepperDash.Core /// /// Char indicating end of line /// + [JsonProperty("endOfLineChar")] public char EndOfLineChar { get; set; } /// /// Defaults to Environment.NewLine; /// + [JsonProperty("endOfLineString")] public string EndOfLineString { get; set; } /// /// Indicates /// + [JsonProperty("deviceReadyResponsePattern")] public string DeviceReadyResponsePattern { get; set; } /// /// Used when communcating to programs running in VC-4 /// + [JsonProperty("roomId")] public string RoomId { get; set; } /// From fa88e1b74459663414c75660e6a67ab2c85a8a56 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 28 May 2024 13:50:53 -0500 Subject: [PATCH 13/13] fix: add null value handling and make some values nullable --- .../Comm/ControlPropertiesConfig.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs b/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs index ae01560..ff869f7 100644 --- a/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs +++ b/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs @@ -20,14 +20,14 @@ namespace PepperDash.Core /// /// The key of the device that contains the control port /// - [JsonProperty("controlPortDevKey")] + [JsonProperty("controlPortDevKey", NullValueHandling = NullValueHandling.Ignore)] public string ControlPortDevKey { get; set; } /// /// The number of the control port on the device specified by ControlPortDevKey /// [JsonProperty("controlPortNumber", NullValueHandling = NullValueHandling.Ignore)] // In case "null" is present in config on this value - public uint ControlPortNumber { get; set; } + public uint? ControlPortNumber { get; set; } /// /// The name of the control port on the device specified by ControlPortDevKey @@ -38,19 +38,19 @@ namespace PepperDash.Core /// /// Properties for ethernet based communications /// - [JsonProperty("tcpSshProperties")] + [JsonProperty("tcpSshProperties", NullValueHandling = NullValueHandling.Ignore)] public TcpSshPropertiesConfig TcpSshProperties { get; set; } /// /// The filename and path for the IR file /// - [JsonProperty("irFile")] + [JsonProperty("irFile", NullValueHandling = NullValueHandling.Ignore)] public string IrFile { get; set; } /// /// The IpId of a Crestron device /// - [JsonProperty("ipId")] + [JsonProperty("ipId", NullValueHandling = NullValueHandling.Ignore)] public string IpId { get; set; } /// @@ -62,33 +62,32 @@ namespace PepperDash.Core /// /// Char indicating end of line /// - [JsonProperty("endOfLineChar")] + [JsonProperty("endOfLineChar", NullValueHandling = NullValueHandling.Ignore)] public char EndOfLineChar { get; set; } /// /// Defaults to Environment.NewLine; /// - [JsonProperty("endOfLineString")] + [JsonProperty("endOfLineString", NullValueHandling = NullValueHandling.Ignore)] public string EndOfLineString { get; set; } /// /// Indicates /// - [JsonProperty("deviceReadyResponsePattern")] + [JsonProperty("deviceReadyResponsePattern", NullValueHandling = NullValueHandling.Ignore)] public string DeviceReadyResponsePattern { get; set; } /// /// Used when communcating to programs running in VC-4 /// - [JsonProperty("roomId")] + [JsonProperty("roomId", NullValueHandling = NullValueHandling.Ignore)] public string RoomId { get; set; } /// /// Constructor /// public ControlPropertiesConfig() - { - EndOfLineString = CrestronEnvironment.NewLine; + { } } } \ No newline at end of file