Radarr/NzbDrone/Program.cs

174 lines
5.3 KiB
C#
Raw Normal View History

2010-10-14 06:29:01 +00:00
using System;
using System.Diagnostics;
2011-07-27 22:59:48 +00:00
using System.Net;
using System.Threading;
2011-07-11 05:05:52 +00:00
using System.Timers;
2010-10-15 07:10:44 +00:00
using Exceptioneer.WindowsFormsClient;
2010-10-14 06:29:01 +00:00
using NLog;
using NzbDrone.Providers;
2010-10-10 19:00:07 +00:00
namespace NzbDrone
2010-09-23 03:19:47 +00:00
{
internal static class Program
2010-09-23 03:19:47 +00:00
{
2010-10-14 06:29:01 +00:00
private static readonly Logger Logger = LogManager.GetLogger("Application");
static readonly ConfigProvider ConfigProvider = new ConfigProvider();
static readonly IISControllerProvider IISController = new IISControllerProvider(ConfigProvider);
2011-04-10 02:44:01 +00:00
private static void Main()
2010-10-14 06:29:01 +00:00
{
try
{
ConfigProvider.ConfigureNlog();
ConfigProvider.CreateDefaultConfigFile();
Logger.Info("Starting NZBDrone. Start-up Path:'{0}'", ConfigProvider.ApplicationRoot);
Thread.CurrentThread.Name = "Host";
Process currentProcess = Process.GetCurrentProcess();
2011-07-11 00:03:01 +00:00
2011-07-11 05:05:52 +00:00
var prioCheckTimer = new System.Timers.Timer(5000);
prioCheckTimer.Elapsed += prioCheckTimer_Elapsed;
prioCheckTimer.Enabled = true;
currentProcess.EnableRaisingEvents = true;
currentProcess.Exited += ProgramExited;
2010-10-14 06:29:01 +00:00
AppDomain.CurrentDomain.UnhandledException += ((s, e) => AppDomainException(e));
2010-10-15 07:10:44 +00:00
AppDomain.CurrentDomain.ProcessExit += ProgramExited;
AppDomain.CurrentDomain.DomainUnload += ProgramExited;
2010-10-14 06:29:01 +00:00
2011-04-22 06:46:26 +00:00
IISController.StopServer();
IISController.StartServer();
2010-10-14 06:29:01 +00:00
2010-10-15 07:10:44 +00:00
#if DEBUG
Attach();
#endif
2011-07-11 00:03:01 +00:00
if (!Environment.UserInteractive || !ConfigProvider.LaunchBrowser)
2011-07-27 22:59:48 +00:00
{
try
{
new WebClient().DownloadString(IISController.AppUrl);
}
catch (Exception e)
{
Logger.ErrorException("Failed to load home page.", e);
}
}
else
{
try
{
Logger.Info("Starting default browser. {0}", IISController.AppUrl);
Process.Start(IISController.AppUrl);
}
catch (Exception e)
{
Logger.ErrorException("Failed to open URL in default browser.", e);
}
while (true)
{
Console.ReadLine();
}
}
}
catch (Exception e)
{
AppDomainException(e);
}
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
2011-07-17 20:01:37 +00:00
private static void prioCheckTimer_Elapsed(object sender, ElapsedEventArgs e)
2011-07-11 00:03:01 +00:00
{
Process currentProcess = Process.GetCurrentProcess();
2011-07-17 20:01:37 +00:00
if (currentProcess.PriorityClass != ProcessPriorityClass.Normal)
2011-07-11 00:03:01 +00:00
{
2011-07-17 20:01:37 +00:00
SetPriority(currentProcess);
2011-07-11 00:03:01 +00:00
}
2011-07-11 05:05:52 +00:00
if (IISControllerProvider.IISProcess != null)
2011-07-11 00:03:01 +00:00
{
IISControllerProvider.IISProcess.Refresh();
2011-07-17 20:01:37 +00:00
if (IISControllerProvider.IISProcess.PriorityClass != ProcessPriorityClass.Normal && IISControllerProvider.IISProcess.PriorityClass != ProcessPriorityClass.AboveNormal)
2011-07-17 20:01:37 +00:00
{
SetPriority(IISControllerProvider.IISProcess);
2011-07-17 20:01:37 +00:00
}
2011-07-11 00:03:01 +00:00
}
}
2011-07-17 20:01:37 +00:00
private static void SetPriority(Process process)
{
Logger.Info("Updating [{0}] process priority from {1} to {2}",
process.ProcessName,
IISControllerProvider.IISProcess.PriorityClass,
2011-07-17 20:01:37 +00:00
ProcessPriorityClass.Normal);
process.PriorityClass = ProcessPriorityClass.Normal;
}
2011-07-11 05:05:52 +00:00
2011-05-27 06:01:07 +00:00
#if DEBUG
private static void Attach()
{
if (Debugger.IsAttached)
{
Logger.Info("Trying to attach to debugger");
var count = 0;
while (true)
{
try
{
ProcessAttacher.Attach();
Logger.Info("Debugger Attached");
return;
}
catch (Exception e)
{
count++;
if (count > 20)
{
Logger.WarnException("Unable to attach to debugger", e);
return;
}
Thread.Sleep(100);
}
2010-10-15 07:10:44 +00:00
}
2010-10-14 06:29:01 +00:00
}
}
2011-05-27 06:01:07 +00:00
#endif
2010-10-14 06:29:01 +00:00
private static void AppDomainException(object excepion)
{
Console.WriteLine("EPIC FAIL: {0}", excepion);
Logger.Fatal("EPIC FAIL: {0}", excepion);
#if RELEASE
2010-10-15 07:10:44 +00:00
new Client
{
ApiKey = "43BBF60A-EB2A-4C1C-B09E-422ADF637265",
ApplicationName = "NZBDrone",
CurrentException = excepion as Exception
}.Submit();
#endif
2010-09-23 03:19:47 +00:00
2011-04-22 06:46:26 +00:00
IISController.StopServer();
2010-10-14 06:29:01 +00:00
}
2010-09-23 03:19:47 +00:00
2011-04-10 02:44:01 +00:00
private static void ProgramExited(object sender, EventArgs e)
2010-10-14 06:29:01 +00:00
{
2011-04-22 06:46:26 +00:00
IISController.StopServer();
2010-10-14 06:29:01 +00:00
}
2010-09-23 03:19:47 +00:00
}
2011-04-10 02:44:01 +00:00
}