From 8ec72ed432b123148d573c99a2aeb00fe20a8f87 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Thu, 21 Apr 2011 23:46:26 -0700 Subject: [PATCH] Cleaned-up NzbDrone.exe --- NzbDrone/IISController.cs | 106 ++++++++++++++++++-------------------- NzbDrone/Program.cs | 12 ++--- 2 files changed, 53 insertions(+), 65 deletions(-) diff --git a/NzbDrone/IISController.cs b/NzbDrone/IISController.cs index 0a00782ca..ee94d89b3 100644 --- a/NzbDrone/IISController.cs +++ b/NzbDrone/IISController.cs @@ -27,7 +27,7 @@ namespace NzbDrone get { return string.Format("http://localhost:{0}/", Config.Port); } } - internal static Process StartIIS() + internal static Process StartServer() { Logger.Info("Preparing IISExpress Server..."); IISProcess = new Process(); @@ -44,9 +44,6 @@ namespace NzbDrone IISProcess.OutputDataReceived += (OnDataReceived); - IISProcess.ErrorDataReceived += ((s, e) => IISLogger.Fatal(e.Data)); - - //Set Variables for the config file. Environment.SetEnvironmentVariable("NZBDRONE_PATH", Config.ProjectRoot); @@ -66,59 +63,18 @@ namespace NzbDrone IISProcess.BeginErrorReadLine(); IISProcess.BeginOutputReadLine(); - StartPing(); + //Start Ping + _pingTimer = new Timer(10000) { AutoReset = true }; + _pingTimer.Elapsed += (Server); + _pingTimer.Start(); return IISProcess; } - private static void StartPing() - { - _pingTimer = new Timer(10000); - _pingTimer.AutoReset = true; - _pingTimer.Elapsed += (PingIIS); - _pingTimer.Start(); - } - - private static void PingIIS(object sender, ElapsedEventArgs e) - { - try - { - var webClient = new WebClient(); - webClient.DownloadString(AppUrl); - Logger.Info("Server said hai..."); - _pingFailCounter = 0; - } - catch (Exception ex) - { - _pingFailCounter++; - Logger.ErrorException("App is not responding. Count " + _pingFailCounter, ex); - if (_pingFailCounter > 3) - { - _pingTimer.Stop(); - Logger.Warn("Attempting to restart server."); - StopIIS(); - KillOrphaned(); - StartIIS(); - } - } - } - - private static void OnDataReceived(object s, DataReceivedEventArgs e) - { - if (e == null || e.Data == null || e.Data.StartsWith("Request started:") || - e.Data.StartsWith("Request ended:") || e.Data == ("IncrementMessages called")) - return; - - IISLogger.Trace(e.Data); - } - - internal static void StopIIS() + internal static void StopServer() { KillProcess(IISProcess); - } - internal static void KillOrphaned() - { Logger.Info("Finding orphaned IIS Processes."); foreach (var process in Process.GetProcessesByName("IISExpress")) { @@ -136,16 +92,40 @@ namespace NzbDrone } } - private static void KillProcess(Process process) + private static void RestartServer() { - if (process != null && !process.HasExited) + _pingTimer.Stop(); + Logger.Warn("Attempting to restart server."); + StopServer(); + StartServer(); + } + + private static void Server(object sender, ElapsedEventArgs e) + { + try { - Logger.Info("[{0}]Killing process", process.Id); - process.Kill(); - Logger.Info("[{0}]Waiting for exit", process.Id); - process.WaitForExit(); - Logger.Info("[{0}]Process terminated successfully", process.Id); + new WebClient().DownloadString(AppUrl); + Logger.Info("Server said hai..."); + _pingFailCounter = 0; } + catch (Exception ex) + { + _pingFailCounter++; + Logger.ErrorException("App is not responding. Count " + _pingFailCounter, ex); + if (_pingFailCounter > 2) + { + RestartServer(); + } + } + } + + private static void OnDataReceived(object s, DataReceivedEventArgs e) + { + if (e == null || e.Data == null || e.Data.StartsWith("Request started:") || + e.Data.StartsWith("Request ended:") || e.Data == ("IncrementMessages called")) + return; + + IISLogger.Trace(e.Data); } private static void UpdateIISConfig() @@ -170,6 +150,18 @@ namespace NzbDrone configXml.Save(configPath); } + private static void KillProcess(Process process) + { + if (process != null && !process.HasExited) + { + Logger.Info("[{0}]Killing process", process.Id); + process.Kill(); + Logger.Info("[{0}]Waiting for exit", process.Id); + process.WaitForExit(); + Logger.Info("[{0}]Process terminated successfully", process.Id); + } + } + private static string CleanPath(string path) { return path.ToLower().Replace("\\", "").Replace("//", "//"); diff --git a/NzbDrone/Program.cs b/NzbDrone/Program.cs index 3b403eb74..536f47efc 100644 --- a/NzbDrone/Program.cs +++ b/NzbDrone/Program.cs @@ -27,8 +27,8 @@ namespace NzbDrone Logger.Info("Starting NZBDrone. Start-up Path:'{0}'", Config.ProjectRoot); - IISController.KillOrphaned(); - IISController.StartIIS(); + IISController.StopServer(); + IISController.StartServer(); Process.Start(IISController.AppUrl); @@ -52,10 +52,6 @@ namespace NzbDrone AppDomainException(e); } - Console.Write("Press Enter At Any Time To Exit..."); - - Console.ReadLine(); - IISController.StopIIS(); } @@ -71,12 +67,12 @@ namespace NzbDrone CurrentException = excepion as Exception }.Submit(); - IISController.StopIIS(); + IISController.StopServer(); } private static void ProgramExited(object sender, EventArgs e) { - IISController.StopIIS(); + IISController.StopServer(); } } } \ No newline at end of file