aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-02-17 15:52:11 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-02-17 15:52:11 +0200
commite29d962c5602fc9fc3a54fa4da8957609de7eea4 (patch)
tree857c8448611b79c3d3834f37edb00965ad5435ba /Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs
parent0cd0b590f62b31a8874ea21f225ba75c7a37053c (diff)
downloadTango-e29d962c5602fc9fc3a54fa4da8957609de7eea4.tar.gz
Tango-e29d962c5602fc9fc3a54fa4da8957609de7eea4.zip
Completed PPC watchdog !
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs107
1 files changed, 107 insertions, 0 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs
index a95a9503c..466c178a2 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs
@@ -1,14 +1,121 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
+using Tango.Core.Helpers;
+using Tango.Logging;
+using Tango.PPC.Common.WatchDog;
using Tango.SharedUI;
+using Tango.SharedUI.Components;
namespace Tango.PPC.WatchDog
{
public class MainWindowVM : ViewModel
{
+ private const String tango_process_name = "Tango.PPC.UI";
+ private WatchDogClient _watchdog;
+ public TextController Log { get; set; }
+ public MainWindowVM()
+ {
+ var logger = new SimpleStringLogger();
+ logger.LogReceived += Logger_LogReceived;
+ LogManager.RegisterLogger(logger);
+
+ _watchdog = new WatchDogClient();
+ _watchdog.ServerNotResponding += _watchdog_ServerNotResponding;
+ Log = new TextController();
+
+ _watchdog.Start();
+ }
+
+ private void Logger_LogReceived(object sender, LogItemBase e)
+ {
+ if (e is ExceptionLogItem)
+ {
+ Log.WriteLine(e.ToString());
+ }
+ else
+ {
+ Log.WriteLine($"[{e.TimeStamp.ToString()}] {e.Message}");
+ }
+ }
+
+ private void _watchdog_ServerNotResponding(object sender, EventArgs e)
+ {
+ LogManager.Log("PPC application failed to respond!", LogCategory.Warning);
+ LogManager.Log("Ensuring PPC application is down...");
+
+ var appProcess = Process.GetProcessesByName(tango_process_name).FirstOrDefault();
+ Process p = new Process();
+ p.StartInfo.CreateNoWindow = true;
+ p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ p.StartInfo.FileName = "wmic";
+ p.StartInfo.Arguments = String.Format("process where name='{0}' delete", tango_process_name);
+
+ try
+ {
+ if (appProcess != null)
+ {
+ LogManager.Log("PPC application process found and seems to be frozen. Trying to kill the process...");
+ appProcess.Kill();
+
+ appProcess = Process.GetProcessesByName(tango_process_name).FirstOrDefault();
+
+ if (appProcess != null)
+ {
+ LogManager.Log("Process kill failed. Trying again...");
+ p.Start();
+ Thread.Sleep(2000);
+
+ appProcess = Process.GetProcessesByName(tango_process_name).FirstOrDefault();
+
+ if (appProcess == null)
+ {
+ LogManager.Log("PPC application is down.");
+ }
+ }
+ else
+ {
+ LogManager.Log("PPC application is down.");
+ }
+ }
+ }
+ catch
+ {
+ try
+ {
+ LogManager.Log("Process kill failed. Trying again...");
+ p.Start();
+ Thread.Sleep(2000);
+
+ appProcess = Process.GetProcessesByName(tango_process_name).FirstOrDefault();
+
+ if (appProcess == null)
+ {
+ LogManager.Log("PPC application is down.");
+ }
+ }
+ catch { }
+ }
+
+ LogManager.Log("Restarting PPC application...");
+
+ try
+ {
+ Process.Start(Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), tango_process_name + ".exe"));
+ LogManager.Log("PPC application started.");
+ Thread.Sleep(5000);
+ _watchdog.Start();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error starting PPC application.");
+ }
+ }
}
}