From 4ac0d90ae487d4a7b97004c43ea3430e1edd7c25 Mon Sep 17 00:00:00 2001 From: MattMofDoom Date: Fri, 11 Jun 2021 01:07:11 +1000 Subject: [PATCH 1/3] Add defaults for boolean properties, timeout, suppression. Make AlertDescription properly optional Add optional Priority and Responders properties Move Suppression interval and Log level config above include/exclude expressions --- Seq.App.EventTimeout/EventTimeoutReactor.cs | 79 ++++++++++++------- .../Seq.App.EventTimeout.csproj | 12 ++- 2 files changed, 57 insertions(+), 34 deletions(-) diff --git a/Seq.App.EventTimeout/EventTimeoutReactor.cs b/Seq.App.EventTimeout/EventTimeoutReactor.cs index 6ea4d78..400a94a 100644 --- a/Seq.App.EventTimeout/EventTimeoutReactor.cs +++ b/Seq.App.EventTimeout/EventTimeoutReactor.cs @@ -49,11 +49,13 @@ public class EventTimeoutReactor : SeqApp, ISubscribeTo // Count of matches private int _matched; + private string _priority; private Dictionary _properties; private string _proxy; private string _proxyPass; private string _proxyUser; private bool _repeatTimeout; + private string _responders; private int _retryCount; private bool _skippedShowtime; private string _startFormat = "H:mm:ss"; @@ -65,15 +67,13 @@ public class EventTimeoutReactor : SeqApp, ISubscribeTo private LogEventLevel _timeoutLogLevel; private Timer _timer; private bool _useHolidays; - private bool _useProxy; - - // ReSharper disable MemberCanBePrivate.Global + private bool _useProxy; // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable AutoPropertyCanBeMadeGetOnly.Global [SeqAppSetting( DisplayName = "Diagnostic logging", - HelpText = "Send extra diagnostic logging to the stream.")] - public bool Diagnostics { get; set; } + HelpText = "Send extra diagnostic logging to the stream. Enabled by default.")] + public bool Diagnostics { get; set; } = true; [SeqAppSetting( DisplayName = "Start time", @@ -87,16 +87,39 @@ public class EventTimeoutReactor : SeqApp, ISubscribeTo [SeqAppSetting( DisplayName = "Timeout interval (seconds)", - HelpText = "Time period in which a matching log entry must be seen. After this, an alert will be raised.", + HelpText = + "Time period in which a matching log entry must be seen. After this, an alert will be raised. Default 60.", InputType = SettingInputType.Integer)] - public int Timeout { get; set; } + public int Timeout { get; set; } = 60; [SeqAppSetting( DisplayName = "Repeat timeout", HelpText = - "Optionally re-arm the timeout after a match, within the start/end time parameters - useful for a 'heartbeat' style alert.", + "Optionally re-arm the timeout after a match, within the start/end time parameters - useful for a 'heartbeat' style alert. Disabled by default.", IsOptional = true)] - public bool RepeatTimeout { get; set; } + public bool RepeatTimeout { get; set; } = false; + + [SeqAppSetting( + DisplayName = "Suppression interval (seconds)", + HelpText = + "If an alert has been raised, further alerts will be suppressed for this time. Will also suppress repeating timeout matches. Default 60.", + InputType = SettingInputType.Integer)] + public int SuppressionTime { get; set; } = 60; + + [SeqAppSetting(DisplayName = "Log level for timeouts", + HelpText = "Verbose, Debug, Information, Warning, Error, Fatal. Defaults to Error.", + IsOptional = true)] + public string TimeoutLogLevel { get; set; } + + [SeqAppSetting(DisplayName = "Priority for timeouts", + HelpText = "Optional Priority property to pass for timeouts, for use with other apps.", + IsOptional = true)] + public string Priority { get; set; } + + [SeqAppSetting(DisplayName = "Responders for timeouts", + HelpText = "Optional Responders property to pass for timeouts, for use with other apps.", + IsOptional = true)] + public string Responders { get; set; } [SeqAppSetting( DisplayName = "Days of week", @@ -117,17 +140,6 @@ public class EventTimeoutReactor : SeqApp, ISubscribeTo IsOptional = true)] public string ExcludeDaysOfMonth { get; set; } - [SeqAppSetting( - DisplayName = "Suppression interval (seconds)", - HelpText = - "If an alert has been raised, further alerts will be suppressed for this time. Will also suppress repeating timeout matches.", - InputType = SettingInputType.Integer)] - public int SuppressionTime { get; set; } - - [SeqAppSetting(DisplayName = "Log level for timeouts", - HelpText = "Verbose, Debug, Information, Warning, Error, Fatal.", - IsOptional = true)] - public string TimeoutLogLevel { get; set; } [SeqAppSetting( DisplayName = "Property 1 name", @@ -211,7 +223,7 @@ public class EventTimeoutReactor : SeqApp, ISubscribeTo [SeqAppSetting( DisplayName = "Holidays - use Holidays API for public holiday detection", HelpText = "Connect to the AbstractApi Holidays service to detect public holidays.")] - public bool UseHolidays { get; set; } + public bool UseHolidays { get; set; } = false; [SeqAppSetting( DisplayName = "Holidays - Retry count", @@ -272,7 +284,7 @@ public class EventTimeoutReactor : SeqApp, ISubscribeTo [SeqAppSetting( DisplayName = "Holidays - proxy bypass local addresses", HelpText = "Bypass local addresses for proxy.")] - public bool BypassLocal { get; set; } + public bool BypassLocal { get; set; } = true; [SeqAppSetting( DisplayName = "Holidays - local addresses for proxy bypass", @@ -485,7 +497,7 @@ protected override void OnAttached() LogEvent(LogEventLevel.Debug, "Validate Alert Description '{AlertDescription}' ...", AlertDescription); _alertDescription = string.IsNullOrWhiteSpace(AlertDescription) - ? _alertMessage + " : Generated by Seq " + Host.BaseUri + ? "" : AlertDescription.Trim(); if (_diagnostics) LogEvent(LogEventLevel.Debug, "Alert Description '{AlertDescription}' will be used ...", @@ -502,6 +514,12 @@ protected override void OnAttached() if (string.IsNullOrWhiteSpace(TimeoutLogLevel)) TimeoutLogLevel = "Error"; if (!Enum.TryParse(TimeoutLogLevel, out _timeoutLogLevel)) _timeoutLogLevel = LogEventLevel.Error; + if (!string.IsNullOrEmpty(Priority)) + _priority = Priority; + + if (!string.IsNullOrEmpty(Responders)) + _responders = Responders; + if (_diagnostics) LogEvent(LogEventLevel.Debug, "Log level {loglevel} will be used for timeouts on {Instance} ...", _timeoutLogLevel, App.Title); @@ -569,8 +587,10 @@ private void TimerOnElapsed(object sender, ElapsedEventArgs e) var suppressDiff = timeNow - _lastLog; if (_isAlert && suppressDiff.TotalSeconds < _suppressionTime.TotalSeconds) return; - //Log event - LogEvent(_timeoutLogLevel, "{Message} : {Description}", _alertMessage, _alertDescription); + //Log event + LogEvent(_timeoutLogLevel, + string.IsNullOrEmpty(_alertDescription) ? "{Message}" : "{Message} : {Description}", + _alertMessage, _alertDescription); _lastLog = timeNow; _isAlert = true; } @@ -893,9 +913,12 @@ private void LogEvent(LogEventLevel logLevel, string message, params object[] ar if (_isTags) Log.ForContext(nameof(Tags), _tags).ForContext("AppName", App.Title) + .ForContext(nameof(Priority), _priority).ForContext(nameof(Responders), _responders) .Write((Serilog.Events.LogEventLevel) logLevel, message, logArgs); else - Log.ForContext("AppName", App.Title).Write((Serilog.Events.LogEventLevel) logLevel, message, logArgs); + Log.ForContext("AppName", App.Title).ForContext(nameof(Priority), _priority) + .ForContext(nameof(Responders), _responders) + .Write((Serilog.Events.LogEventLevel) logLevel, message, logArgs); } /// @@ -919,9 +942,11 @@ private void LogEvent(LogEventLevel logLevel, Exception exception, string messag if (_isTags) Log.ForContext(nameof(Tags), _tags).ForContext("AppName", App.Title) + .ForContext(nameof(Priority), _priority).ForContext(nameof(Responders), _responders) .Write((Serilog.Events.LogEventLevel) logLevel, exception, message, logArgs); else - Log.ForContext("AppName", App.Title) + Log.ForContext("AppName", App.Title).ForContext(nameof(Priority), _priority) + .ForContext(nameof(Responders), _responders) .Write((Serilog.Events.LogEventLevel) logLevel, exception, message, logArgs); } } diff --git a/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj b/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj index 6523c3e..6fda08d 100644 --- a/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj +++ b/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj @@ -8,7 +8,7 @@ $([System.DateTime]::UtcNow.ToString(mmff)) - 1.3.8 + 1.4.0 $(Version).1 $(Version).$(VersionSuffix) $(Version).0 @@ -24,12 +24,10 @@ seq-app alert.png LICENSE - - Update date logic for last day of month for variable month lengths -- Correct last weekday date expression -- Update date expression names for clarity -- Code cleanup, add code documentation -- Code refactoring -- Expose Holiday retry config for convenience + - Set defaults for boolean properties, timeout, and suppression values +- Alert description is now properly optional +- Priority and Responders properties added for integration with other apps +- Moved config items for clarity true true From 1033aaa9728353bafa6e239ffdf0eed7240f0d02 Mon Sep 17 00:00:00 2001 From: MattMofDoom Date: Mon, 14 Jun 2021 12:35:31 +1000 Subject: [PATCH 2/3] Refactor, fix issue with AbstractAPI deserialization --- .../{ => Classes}/AbstractApiHolidays.cs | 63 ++++++++++--------- .../{ => Classes}/ApiClient.cs | 2 +- .../{ => Classes}/DateExpression.cs | 3 +- Seq.App.EventTimeout/{ => Classes}/Dates.cs | 3 +- .../{ => Classes}/Holidays.cs | 6 +- .../{ => Classes}/PropertyMatch.cs | 2 +- .../{ => Classes}/WebClient.cs | 2 +- Seq.App.EventTimeout/{ => Enums}/DayMatch.cs | 2 +- Seq.App.EventTimeout/{ => Enums}/DayOrder.cs | 2 +- Seq.App.EventTimeout/{ => Enums}/DayType.cs | 2 +- Seq.App.EventTimeout/EventTimeoutReactor.cs | 10 +-- .../Seq.App.EventTimeout.csproj | 3 +- 12 files changed, 53 insertions(+), 47 deletions(-) rename Seq.App.EventTimeout/{ => Classes}/AbstractApiHolidays.cs (54%) rename Seq.App.EventTimeout/{ => Classes}/ApiClient.cs (98%) rename Seq.App.EventTimeout/{ => Classes}/DateExpression.cs (93%) rename Seq.App.EventTimeout/{ => Classes}/Dates.cs (99%) rename Seq.App.EventTimeout/{ => Classes}/Holidays.cs (95%) rename Seq.App.EventTimeout/{ => Classes}/PropertyMatch.cs (98%) rename Seq.App.EventTimeout/{ => Classes}/WebClient.cs (98%) rename Seq.App.EventTimeout/{ => Enums}/DayMatch.cs (92%) rename Seq.App.EventTimeout/{ => Enums}/DayOrder.cs (88%) rename Seq.App.EventTimeout/{ => Enums}/DayType.cs (85%) diff --git a/Seq.App.EventTimeout/AbstractApiHolidays.cs b/Seq.App.EventTimeout/Classes/AbstractApiHolidays.cs similarity index 54% rename from Seq.App.EventTimeout/AbstractApiHolidays.cs rename to Seq.App.EventTimeout/Classes/AbstractApiHolidays.cs index eab7322..170922b 100644 --- a/Seq.App.EventTimeout/AbstractApiHolidays.cs +++ b/Seq.App.EventTimeout/Classes/AbstractApiHolidays.cs @@ -3,7 +3,7 @@ using System.Globalization; using System.Linq; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Classes { /// /// AbstractAPI Holidays API format @@ -31,28 +31,29 @@ protected AbstractApiHolidays(string name, string name_local, string language, s string location, string type, string date, string date_year, string date_month, string date_day, string week_day) { - Name = name; - Name_local = name_local; - Language = language; - Description = description; - Location = location; - if (Location.Contains(" - ")) - Locations = Location - .Substring(Location.IndexOf(" - ", StringComparison.Ordinal) + 3, - Location.Length - Location.IndexOf(" - ", StringComparison.Ordinal) - 3) + this.name = name; + this.name_local = name_local; + this.language = language; + this.description = description; + this.location = location; + if (this.location.Contains(" - ")) + Locations = this.location + .Substring(this.location.IndexOf(" - ", StringComparison.Ordinal) + 3, + this.location.Length - this.location.IndexOf(" - ", StringComparison.Ordinal) - 3) .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Select(t => t.Trim()).ToList(); else - Locations = Location.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Select(t => t.Trim()) + Locations = this.location.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries) + .Select(t => t.Trim()) .ToList(); - Country = country; - Type = type; - Date = date; - Date_year = date_year; - Date_month = date_month; - Date_day = date_day; - Week_day = week_day; - LocalStart = DateTime.ParseExact(Date, "M/d/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None); + this.country = country; + this.type = type; + this.date = date; + this.date_year = date_year; + this.date_month = date_month; + this.date_day = date_day; + this.week_day = week_day; + LocalStart = DateTime.ParseExact(this.date, "M/d/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None); UtcStart = LocalStart.ToUniversalTime(); UtcEnd = LocalStart.AddDays(1).ToUniversalTime(); } @@ -60,21 +61,21 @@ protected AbstractApiHolidays(string name, string name_local, string language, s // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedAutoPropertyAccessor.Local // ReSharper disable UnusedAutoPropertyAccessor.Global - public string Name { get; } - public string Name_local { get; } - public string Language { get; } - public string Description { get; } - public string Country { get; } - public string Location { get; } + public string name { get; } + public string name_local { get; } + public string language { get; } + public string description { get; } + public string country { get; } + public string location { get; } public List Locations { get; } - public string Type { get; } + public string type { get; } public DateTime LocalStart { get; } public DateTime UtcStart { get; } public DateTime UtcEnd { get; } - public string Date { get; } - public string Date_year { get; } - public string Date_month { get; } - public string Date_day { get; } - public string Week_day { get; } + public string date { get; } + public string date_year { get; } + public string date_month { get; } + public string date_day { get; } + public string week_day { get; } } } \ No newline at end of file diff --git a/Seq.App.EventTimeout/ApiClient.cs b/Seq.App.EventTimeout/Classes/ApiClient.cs similarity index 98% rename from Seq.App.EventTimeout/ApiClient.cs rename to Seq.App.EventTimeout/Classes/ApiClient.cs index 19370ef..cc9f3f1 100644 --- a/Seq.App.EventTimeout/ApiClient.cs +++ b/Seq.App.EventTimeout/Classes/ApiClient.cs @@ -3,7 +3,7 @@ using System.Net.Http; using Flurl.Http.Configuration; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Classes { /// /// HTTP Client for retrieving Holidays API diff --git a/Seq.App.EventTimeout/DateExpression.cs b/Seq.App.EventTimeout/Classes/DateExpression.cs similarity index 93% rename from Seq.App.EventTimeout/DateExpression.cs rename to Seq.App.EventTimeout/Classes/DateExpression.cs index c9528fa..d76d09b 100644 --- a/Seq.App.EventTimeout/DateExpression.cs +++ b/Seq.App.EventTimeout/Classes/DateExpression.cs @@ -1,6 +1,7 @@ using System; +using Seq.App.EventTimeout.Enums; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Classes { /// /// Date Expression comprising the day order, day type, day of week, and day of month diff --git a/Seq.App.EventTimeout/Dates.cs b/Seq.App.EventTimeout/Classes/Dates.cs similarity index 99% rename from Seq.App.EventTimeout/Dates.cs rename to Seq.App.EventTimeout/Classes/Dates.cs index c05d0d8..482ad2c 100644 --- a/Seq.App.EventTimeout/Dates.cs +++ b/Seq.App.EventTimeout/Classes/Dates.cs @@ -2,8 +2,9 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using Seq.App.EventTimeout.Enums; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Classes { /// /// Date calculations for inclusions/exclusions diff --git a/Seq.App.EventTimeout/Holidays.cs b/Seq.App.EventTimeout/Classes/Holidays.cs similarity index 95% rename from Seq.App.EventTimeout/Holidays.cs rename to Seq.App.EventTimeout/Classes/Holidays.cs index dd2fd84..b2d5f7a 100644 --- a/Seq.App.EventTimeout/Holidays.cs +++ b/Seq.App.EventTimeout/Classes/Holidays.cs @@ -3,7 +3,7 @@ using System.Globalization; using System.Linq; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Classes { /// /// Holidays methods @@ -48,7 +48,7 @@ public static List ValidateHolidays(IEnumerable 0) // ReSharper disable once UnusedVariable foreach (var match in holidayMatch.Where(match => - holiday.Type.IndexOf(match, StringComparison.OrdinalIgnoreCase) >= 0)) + holiday.type.IndexOf(match, StringComparison.OrdinalIgnoreCase) >= 0)) hasType = true; if (localeMatch.Count > 0) @@ -58,7 +58,7 @@ public static List ValidateHolidays(IEnumerable= 0) + if (!includeBank && holiday.name.IndexOf("Bank Holiday", StringComparison.OrdinalIgnoreCase) >= 0) isBank = true; if (!includeWeekends && (holiday.LocalStart.DayOfWeek == DayOfWeek.Sunday || diff --git a/Seq.App.EventTimeout/PropertyMatch.cs b/Seq.App.EventTimeout/Classes/PropertyMatch.cs similarity index 98% rename from Seq.App.EventTimeout/PropertyMatch.cs rename to Seq.App.EventTimeout/Classes/PropertyMatch.cs index a7aca1c..49f192c 100644 --- a/Seq.App.EventTimeout/PropertyMatch.cs +++ b/Seq.App.EventTimeout/Classes/PropertyMatch.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Classes { /// /// Property matching methods diff --git a/Seq.App.EventTimeout/WebClient.cs b/Seq.App.EventTimeout/Classes/WebClient.cs similarity index 98% rename from Seq.App.EventTimeout/WebClient.cs rename to Seq.App.EventTimeout/Classes/WebClient.cs index ce829de..da920a4 100644 --- a/Seq.App.EventTimeout/WebClient.cs +++ b/Seq.App.EventTimeout/Classes/WebClient.cs @@ -3,7 +3,7 @@ using System.Threading.Tasks; using Flurl.Http; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Classes { /// /// Web access methods diff --git a/Seq.App.EventTimeout/DayMatch.cs b/Seq.App.EventTimeout/Enums/DayMatch.cs similarity index 92% rename from Seq.App.EventTimeout/DayMatch.cs rename to Seq.App.EventTimeout/Enums/DayMatch.cs index 4377296..f067ef2 100644 --- a/Seq.App.EventTimeout/DayMatch.cs +++ b/Seq.App.EventTimeout/Enums/DayMatch.cs @@ -1,6 +1,6 @@ using System; -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Enums { /// /// Match days of week, or none diff --git a/Seq.App.EventTimeout/DayOrder.cs b/Seq.App.EventTimeout/Enums/DayOrder.cs similarity index 88% rename from Seq.App.EventTimeout/DayOrder.cs rename to Seq.App.EventTimeout/Enums/DayOrder.cs index 737f7fc..9a8a30c 100644 --- a/Seq.App.EventTimeout/DayOrder.cs +++ b/Seq.App.EventTimeout/Enums/DayOrder.cs @@ -1,4 +1,4 @@ -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Enums { /// /// Day order within a date expression diff --git a/Seq.App.EventTimeout/DayType.cs b/Seq.App.EventTimeout/Enums/DayType.cs similarity index 85% rename from Seq.App.EventTimeout/DayType.cs rename to Seq.App.EventTimeout/Enums/DayType.cs index 2156e0d..f2255b1 100644 --- a/Seq.App.EventTimeout/DayType.cs +++ b/Seq.App.EventTimeout/Enums/DayType.cs @@ -1,4 +1,4 @@ -namespace Seq.App.EventTimeout +namespace Seq.App.EventTimeout.Enums { /// /// Day type within a date expression diff --git a/Seq.App.EventTimeout/EventTimeoutReactor.cs b/Seq.App.EventTimeout/EventTimeoutReactor.cs index 400a94a..a92584a 100644 --- a/Seq.App.EventTimeout/EventTimeoutReactor.cs +++ b/Seq.App.EventTimeout/EventTimeoutReactor.cs @@ -3,6 +3,7 @@ using System.Globalization; using System.Linq; using System.Timers; +using Seq.App.EventTimeout.Classes; using Seq.Apps; using Seq.Apps.LogEvents; @@ -68,6 +69,7 @@ public class EventTimeoutReactor : SeqApp, ISubscribeTo private Timer _timer; private bool _useHolidays; private bool _useProxy; // ReSharper disable MemberCanBePrivate.Global + // ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable AutoPropertyCanBeMadeGetOnly.Global [SeqAppSetting( @@ -814,8 +816,8 @@ private void RetrieveHolidays(DateTime localDate, DateTime utcDate) foreach (var holiday in result) LogEvent(LogEventLevel.Debug, "Holiday Name: {Name}, Local Name {LocalName}, Start {LocalStart}, Start UTC {Start}, End UTC {End}, Type {Type}, Location string {Location}, Locations parsed {Locations} ...", - holiday.Name, holiday.Name_local, holiday.LocalStart, holiday.UtcStart, holiday.UtcEnd, - holiday.Type, holiday.Location, holiday.Locations.ToArray()); + holiday.name, holiday.name_local, holiday.LocalStart, holiday.UtcStart, holiday.UtcEnd, + holiday.type, holiday.location, holiday.Locations.ToArray()); } LogEvent(LogEventLevel.Debug, "Holidays retrieved and validated {holidayCount} ...", @@ -823,8 +825,8 @@ private void RetrieveHolidays(DateTime localDate, DateTime utcDate) foreach (var holiday in _holidays) LogEvent(LogEventLevel.Debug, "Holiday Name: {Name}, Local Name {LocalName}, Start {LocalStart}, Start UTC {Start}, End UTC {End}, Type {Type}, Location string {Location}, Locations parsed {Locations} ...", - holiday.Name, holiday.Name_local, holiday.LocalStart, holiday.UtcStart, holiday.UtcEnd, - holiday.Type, holiday.Location, holiday.Locations.ToArray()); + holiday.name, holiday.name_local, holiday.LocalStart, holiday.UtcStart, holiday.UtcEnd, + holiday.type, holiday.location, holiday.Locations.ToArray()); _isUpdating = false; if (!_isShowtime) UtcRollover(utcDate, true); diff --git a/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj b/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj index 6fda08d..11af0c2 100644 --- a/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj +++ b/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj @@ -27,7 +27,8 @@ - Set defaults for boolean properties, timeout, and suppression values - Alert description is now properly optional - Priority and Responders properties added for integration with other apps -- Moved config items for clarity +- Moved config items for clarity +- Correctly set camel case for AbstractAPI true true From a5baebe1e0e6ed38bfdb3f362a06457ab3399303 Mon Sep 17 00:00:00 2001 From: MattMofDoom Date: Mon, 14 Jun 2021 12:38:50 +1000 Subject: [PATCH 3/3] Update release notes --- Seq.App.EventTimeout/Seq.App.EventTimeout.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj b/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj index 11af0c2..c0718f3 100644 --- a/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj +++ b/Seq.App.EventTimeout/Seq.App.EventTimeout.csproj @@ -28,7 +28,7 @@ - Alert description is now properly optional - Priority and Responders properties added for integration with other apps - Moved config items for clarity -- Correctly set camel case for AbstractAPI +- Correctly deserialize AbstractAPI true true