diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-08-14 20:09:19 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-08-14 20:09:19 +0300 |
| commit | ef22b8bc38d2f82b9939c2b6ff6a47d36abbe25b (patch) | |
| tree | e8a6ad246928442b20edf17ed098d1acba0add9e /Software/Visual_Studio | |
| parent | 3d6c698db7add1bc7825f3b67611f0c18fe07e1d (diff) | |
| download | Tango-ef22b8bc38d2f82b9939c2b6ff6a47d36abbe25b.tar.gz Tango-ef22b8bc38d2f82b9939c2b6ff6a47d36abbe25b.zip | |
Improved FSE application termination analysis using settings. (increased crash report history to 1 hour instead of 10 minutes)
Diffstat (limited to 'Software/Visual_Studio')
4 files changed, 39 insertions, 5 deletions
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FSESettings.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FSESettings.cs index 0592aa6cc..352294e0a 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/FSESettings.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FSESettings.cs @@ -137,6 +137,11 @@ namespace Tango.FSE.Common public String LastReportArea { get; set; } /// <summary> + /// Gets or sets a value indicating whether the application has terminated unexpectedly. + /// </summary> + public bool TerminatedExpectedly { get; set; } + + /// <summary> /// Initializes a new instance of the <see cref="FSESettings"/> class. /// </summary> public FSESettings() @@ -152,6 +157,7 @@ namespace Tango.FSE.Common AutoMachineReconnectionTimeoutSeconds = 10; AutoCheckForUpdates = true; EnableAdaptiveScaling = true; + TerminatedExpectedly = true; } } }
\ No newline at end of file diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/App.xaml.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/App.xaml.cs index 6bec431fa..8f0b97d2b 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/App.xaml.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/App.xaml.cs @@ -95,14 +95,40 @@ namespace Tango.FSE.UI exceptionTrapper.Initialize(this); exceptionTrapper.ApplicationCrashed += ExceptionTrapper_ApplicationCrashed; - GetLastApplicationCrashFromWindows(); + if (!Debugger.IsAttached) + { + ProcessLastApplicationTermination(); + } } #region Global Exception Trapping + private void ProcessLastApplicationTermination() + { + try + { + LogManager.Log("Analyzing previous application termination state..."); + + var settings = SettingsManager.Default.GetOrCreate<FSESettings>(); + + if (!settings.TerminatedExpectedly) + { + GetLastApplicationCrashFromWindows(); + } + + settings.TerminatedExpectedly = false; + settings.Save(); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error occurred while processing application last termination state."); + } + } + private async void GetLastApplicationCrashFromWindows() { - var logItem = await exceptionTrapper.GetLastApplicationCrashEventLog(); + //Try find event log crash reports from the last 60 minutes... + var logItem = await exceptionTrapper.GetLastApplicationCrashEventLog(60); if (logItem != null) { IsStartedAfterCrash = true; diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/FSEApplication/DefaultFSEApplicationManager.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/FSEApplication/DefaultFSEApplicationManager.cs index 2346afdfb..48087bff9 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/FSEApplication/DefaultFSEApplicationManager.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/FSEApplication/DefaultFSEApplicationManager.cs @@ -391,6 +391,8 @@ namespace Tango.FSE.UI.FSEApplication try { + var settings = SettingsManager.Default.GetOrCreate<FSESettings>(); + settings.TerminatedExpectedly = true; SettingsManager.Default.Save(); } catch { } diff --git a/Software/Visual_Studio/Tango.Logging/GlobalExceptionTrapper.cs b/Software/Visual_Studio/Tango.Logging/GlobalExceptionTrapper.cs index 722bceb56..8bc3729f2 100644 --- a/Software/Visual_Studio/Tango.Logging/GlobalExceptionTrapper.cs +++ b/Software/Visual_Studio/Tango.Logging/GlobalExceptionTrapper.cs @@ -102,7 +102,7 @@ namespace Tango.Logging return e.TryRecover; } - public Task<MessageLogItem> GetLastApplicationCrashEventLog() + public Task<MessageLogItem> GetLastApplicationCrashEventLog(int maxMinutes = 10) { return Task.Factory.StartNew<MessageLogItem>(() => { @@ -111,7 +111,7 @@ namespace Tango.Logging try { var applicationEvents = new EventLog("Application"); - var events = applicationEvents.Entries.Cast<EventLogEntry>().Where(x => x.EntryType == EventLogEntryType.Error && x.Source == ".NET Runtime" && x.TimeWritten > DateTime.Now.AddMinutes(-10)).OrderByDescending(x => x.TimeWritten).ToList(); + var events = applicationEvents.Entries.Cast<EventLogEntry>().Where(x => x.EntryType == EventLogEntryType.Error && x.Source == ".NET Runtime" && x.TimeWritten > DateTime.Now.AddMinutes(-maxMinutes)).OrderByDescending(x => x.TimeWritten).ToList(); Regex reg = new Regex("Application: (.+)"); @@ -131,7 +131,7 @@ namespace Tango.Logging logItem.Message += "---------------------------------------------------------------------------\n\n"; logItem.Message += ev.Message; logItem.TimeStamp = DateTime.Now; - logItem.Category = LogCategory.Error; + logItem.Category = LogCategory.Critical; break; } } |
