diff --git a/src/SiteMonitor/Constants.cs b/src/SiteMonitor/Constants.cs index e189039..0cc8052 100644 --- a/src/SiteMonitor/Constants.cs +++ b/src/SiteMonitor/Constants.cs @@ -1,4 +1,5 @@ -using System.Reflection; +using System; +using System.Reflection; namespace SiteMonitor; @@ -6,6 +7,16 @@ namespace SiteMonitor; /// Constants used throughout the file. /// public class Constants { + /// + /// The maximum amount of time before alerting the user that we aren't getting chat messages. + /// + public static readonly TimeSpan MAX_TIME_WITHOUT_CHATS = TimeSpan.FromMinutes(30); + + /// + /// The maximum amount of time before alerting the user that the APIs are down and not automatically coming back up. + /// + public static readonly TimeSpan MAX_TIME_SERVICE_IS_DOWN = TimeSpan.FromMinutes(5); + /// /// The version of the application being run right now. /// diff --git a/src/SiteMonitor/ViewModels/MainWindowViewModel.cs b/src/SiteMonitor/ViewModels/MainWindowViewModel.cs index b32ffa7..db9c818 100644 --- a/src/SiteMonitor/ViewModels/MainWindowViewModel.cs +++ b/src/SiteMonitor/ViewModels/MainWindowViewModel.cs @@ -21,6 +21,7 @@ namespace SiteMonitor.ViewModels; /// The view model for the main UI. /// public partial class MainWindowViewModel : ViewModelBase { + private DateTime? _apiDownSince; [ObservableProperty] private bool _apiUp = true; [ObservableProperty] private string? _chatTimestamp; @@ -168,7 +169,7 @@ private async Task PingSite() { TimeSpan diff = DateTime.Now - time.ToLocalTime(); timestamp = $"{timestamp} ({diff.Hours}h {diff.Minutes}m {diff.Seconds}s ago)"; ChatTimestamp = timestamp; - chatNotUpdating = diff > TimeSpan.FromMinutes(5); + chatNotUpdating = diff > Constants.MAX_TIME_WITHOUT_CHATS; } } else { @@ -176,7 +177,9 @@ private async Task PingSite() { chatNotUpdating = true; } - if ((!WebsiteUp || !ApiUp || !NullUp || chatNotUpdating) && IsMinimized) { + _apiDownSince = !WebsiteUp || !ApiUp || !NullUp ? _apiDownSince ?? DateTime.Now : null; + bool apiNotComingUp = DateTime.Now - _apiDownSince > Constants.MAX_TIME_SERVICE_IS_DOWN; + if ((apiNotComingUp || chatNotUpdating) && IsMinimized) { WindowState = WindowState.Normal; }