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 | 102 ++++++++++++++++++-------------------- NzbDrone/Program.cs | 12 ++--- 2 files changed, 51 insertions(+), 63 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,25 +63,48 @@ 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() + internal static void StopServer() { - _pingTimer = new Timer(10000); - _pingTimer.AutoReset = true; - _pingTimer.Elapsed += (PingIIS); - _pingTimer.Start(); + KillProcess(IISProcess); + + Logger.Info("Finding orphaned IIS Processes."); + foreach (var process in Process.GetProcessesByName("IISExpress")) + { + string processPath = process.MainModule.FileName; + Logger.Info("[{0}]IIS Process found. Path:{1}", process.Id, processPath); + if (CleanPath(processPath) == CleanPath(IISExe)) + { + Logger.Info("[{0}]Process is considered orphaned.", process.Id); + KillProcess(process); + } + else + { + Logger.Info("[{0}]Process has a different start-up path. skipping.", process.Id); + } + } } - private static void PingIIS(object sender, ElapsedEventArgs e) + private static void RestartServer() + { + _pingTimer.Stop(); + Logger.Warn("Attempting to restart server."); + StopServer(); + StartServer(); + } + + private static void Server(object sender, ElapsedEventArgs e) { try { - var webClient = new WebClient(); - webClient.DownloadString(AppUrl); + new WebClient().DownloadString(AppUrl); Logger.Info("Server said hai..."); _pingFailCounter = 0; } @@ -92,13 +112,9 @@ namespace NzbDrone { _pingFailCounter++; Logger.ErrorException("App is not responding. Count " + _pingFailCounter, ex); - if (_pingFailCounter > 3) + if (_pingFailCounter > 2) { - _pingTimer.Stop(); - Logger.Warn("Attempting to restart server."); - StopIIS(); - KillOrphaned(); - StartIIS(); + RestartServer(); } } } @@ -112,42 +128,6 @@ namespace NzbDrone IISLogger.Trace(e.Data); } - internal static void StopIIS() - { - KillProcess(IISProcess); - } - - internal static void KillOrphaned() - { - Logger.Info("Finding orphaned IIS Processes."); - foreach (var process in Process.GetProcessesByName("IISExpress")) - { - string processPath = process.MainModule.FileName; - Logger.Info("[{0}]IIS Process found. Path:{1}", process.Id, processPath); - if (CleanPath(processPath) == CleanPath(IISExe)) - { - Logger.Info("[{0}]Process is considered orphaned.", process.Id); - KillProcess(process); - } - else - { - Logger.Info("[{0}]Process has a different start-up path. skipping.", process.Id); - } - } - } - - 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 void UpdateIISConfig() { string configPath = Path.Combine(IISFolder, @"AppServer\applicationhost.config"); @@ -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