2011-10-07 06:36:04 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Diagnostics;
|
2012-02-11 01:43:07 +00:00
|
|
|
|
using System.Threading;
|
2011-10-07 06:36:04 +00:00
|
|
|
|
using NLog;
|
2011-10-23 05:26:43 +00:00
|
|
|
|
using NzbDrone.Common;
|
2011-10-07 06:36:04 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Providers
|
|
|
|
|
{
|
|
|
|
|
public class MonitoringProvider
|
|
|
|
|
{
|
2012-02-11 01:43:07 +00:00
|
|
|
|
private static readonly Logger logger = LogManager.GetLogger("Host.MonitoringProvider");
|
2011-10-07 06:36:04 +00:00
|
|
|
|
|
|
|
|
|
private readonly ProcessProvider _processProvider;
|
|
|
|
|
|
2012-02-11 01:43:07 +00:00
|
|
|
|
private Timer _processPriorityCheckTimer;
|
2011-10-07 06:36:04 +00:00
|
|
|
|
|
2013-02-21 04:47:06 +00:00
|
|
|
|
public MonitoringProvider(ProcessProvider processProvider)
|
2011-10-07 06:36:04 +00:00
|
|
|
|
{
|
|
|
|
|
_processProvider = processProvider;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Start()
|
|
|
|
|
{
|
2011-10-17 01:42:20 +00:00
|
|
|
|
AppDomain.CurrentDomain.UnhandledException += ((s, e) => AppDomainException(e.ExceptionObject as Exception));
|
2011-10-07 06:36:04 +00:00
|
|
|
|
|
2012-03-02 19:58:31 +00:00
|
|
|
|
|
2012-02-11 01:43:07 +00:00
|
|
|
|
_processPriorityCheckTimer = new Timer(EnsurePriority);
|
|
|
|
|
_processPriorityCheckTimer.Change(TimeSpan.FromSeconds(15), TimeSpan.FromMinutes(30));
|
2011-10-07 06:36:04 +00:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2012-02-11 01:43:07 +00:00
|
|
|
|
public virtual void EnsurePriority(object sender)
|
2011-10-07 06:36:04 +00:00
|
|
|
|
{
|
2012-03-02 19:58:31 +00:00
|
|
|
|
try
|
2011-10-07 06:36:04 +00:00
|
|
|
|
{
|
2012-03-02 19:58:31 +00:00
|
|
|
|
var currentProcess = _processProvider.GetCurrentProcess();
|
|
|
|
|
if (currentProcess.Priority != ProcessPriorityClass.Normal)
|
|
|
|
|
{
|
|
|
|
|
_processProvider.SetPriority(currentProcess.Id, ProcessPriorityClass.Normal);
|
|
|
|
|
}
|
2011-10-07 06:36:04 +00:00
|
|
|
|
|
2013-02-19 01:13:42 +00:00
|
|
|
|
var iisProcess = _processProvider.GetProcessById(_processProvider.GetCurrentProcess().Id);
|
2012-03-02 19:58:31 +00:00
|
|
|
|
if (iisProcess != null && iisProcess.Priority != ProcessPriorityClass.Normal &&
|
|
|
|
|
iisProcess.Priority != ProcessPriorityClass.AboveNormal)
|
|
|
|
|
{
|
|
|
|
|
_processProvider.SetPriority(iisProcess.Id, ProcessPriorityClass.Normal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
2011-10-07 06:36:04 +00:00
|
|
|
|
{
|
2012-03-02 19:58:31 +00:00
|
|
|
|
logger.WarnException("Unable to verify priority", e);
|
2011-10-07 06:36:04 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-10-17 01:42:20 +00:00
|
|
|
|
public static void AppDomainException(Exception excepion)
|
2011-10-07 06:36:04 +00:00
|
|
|
|
{
|
2011-10-15 00:59:24 +00:00
|
|
|
|
Console.WriteLine("EPIC FAIL: {0}", excepion);
|
2012-02-11 01:43:07 +00:00
|
|
|
|
logger.FatalException("EPIC FAIL: " + excepion.Message, excepion);
|
2011-10-07 06:36:04 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|