Radarr/NzbDrone.Core/CentralDispatch.cs

92 lines
2.8 KiB
C#
Raw Normal View History

2010-09-23 03:19:47 +00:00
using System;
using System.Diagnostics;
2011-06-18 01:46:22 +00:00
using System.Linq;
2013-01-03 01:09:13 +00:00
using Autofac;
2011-04-10 02:44:01 +00:00
using NLog;
2011-11-13 07:27:16 +00:00
using NzbDrone.Common;
using NzbDrone.Core.Instrumentation;
2012-01-25 03:09:49 +00:00
using NzbDrone.Core.Providers.Core;
using SignalR;
2010-09-23 03:19:47 +00:00
namespace NzbDrone.Core
{
2011-11-08 20:12:54 +00:00
public class CentralDispatch
2010-09-23 03:19:47 +00:00
{
private readonly Logger _logger;
private readonly EnvironmentProvider _environmentProvider;
2010-10-07 22:17:24 +00:00
2013-01-03 01:09:13 +00:00
public ContainerBuilder ContainerBuilder { get; private set; }
2011-11-08 20:12:54 +00:00
public CentralDispatch()
2011-04-10 02:44:01 +00:00
{
_logger = LogManager.GetCurrentClassLogger();
_environmentProvider = new EnvironmentProvider();
2012-01-26 01:29:55 +00:00
_logger.Debug("Initializing ContainerBuilder:");
2013-01-03 01:09:13 +00:00
ContainerBuilder = new ContainerBuilder();
2011-04-10 02:44:01 +00:00
2013-01-03 01:09:13 +00:00
}
2013-01-19 05:14:12 +00:00
private void RegisterReporting(IComponentContext container)
2013-01-03 01:09:13 +00:00
{
EnvironmentProvider.UGuid = container.Resolve<ConfigProvider>().UGuid;
ReportingService.RestProvider = container.Resolve<RestProvider>();
ReportingService.SetupExceptronDriver();
}
2012-07-12 21:48:09 +00:00
2011-11-08 20:12:54 +00:00
public void DedicateToHost()
{
try
{
var pid = _environmentProvider.NzbDroneProcessIdFromEnviroment;
_logger.Debug("Attaching to parent process ({0}) for automatic termination.", pid);
var hostProcess = Process.GetProcessById(Convert.ToInt32(pid));
hostProcess.EnableRaisingEvents = true;
hostProcess.Exited += (delegate
2011-04-10 02:44:01 +00:00
{
_logger.Info("Host has been terminated. Shutting down web server.");
2011-04-10 02:44:01 +00:00
ShutDown();
});
_logger.Debug("Successfully Attached to host. Process [{0}]", hostProcess.ProcessName);
}
catch (Exception e)
{
_logger.FatalException("An error has occurred while dedicating to host.", e);
}
}
2013-01-03 03:04:42 +00:00
public IContainer BuildContainer()
2013-01-03 01:09:13 +00:00
{
_logger.Debug("Initializing Components");
2013-01-03 01:09:13 +00:00
ContainerBuilder.RegisterCoreServices();
var container = ContainerBuilder.Build();
2013-01-03 01:09:13 +00:00
container.Resolve<DatabaseTarget>().Register();
LogConfiguration.Reload();
RegisterReporting(container);
2013-01-03 01:09:13 +00:00
container.Resolve<WebTimer>().StartTimer(30);
//SignalR
GlobalHost.DependencyResolver = new AutofacSignalrDependencyResolver(container.BeginLifetimeScope("SignalR"));
return container;
}
private void ShutDown()
{
_logger.Info("Shutting down application...");
WebTimer.Stop();
Process.GetCurrentProcess().Kill();
}
2010-09-23 03:19:47 +00:00
}
}