1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-09-11 03:52:33 +02:00

Host process cleanup.

This commit is contained in:
Keivan Beigi 2013-08-30 15:55:01 -07:00
parent dd835d5503
commit 7a19b6a2b3
9 changed files with 46 additions and 65 deletions

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Threading; using System.Threading;
using NLog;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Host; using NzbDrone.Host;
@ -7,6 +8,8 @@ namespace NzbDrone.Console
{ {
public static class ConsoleApp public static class ConsoleApp
{ {
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public static void Main(string[] args) public static void Main(string[] args)
{ {
try try
@ -18,7 +21,7 @@ public static void Main(string[] args)
} }
catch (Exception e) catch (Exception e)
{ {
System.Console.WriteLine(e.ToString()); Logger.FatalException(e.Message, e);
System.Console.ReadLine(); System.Console.ReadLine();
} }

View File

@ -1,6 +1,7 @@
using System; using System;
using NetFwTypeLib; using NetFwTypeLib;
using NLog; using NLog;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
namespace NzbDrone.Host.AccessControl namespace NzbDrone.Host.AccessControl
@ -31,9 +32,6 @@ public void MakeAccessible()
return; return;
} }
CloseFirewallPort();
//Open the new port
OpenFirewallPort(_configFileProvider.Port); OpenFirewallPort(_configFileProvider.Port);
} }
} }
@ -91,38 +89,10 @@ private void OpenFirewallPort(int portNumber)
} }
} }
private void CloseFirewallPort()
{
try
{
var netFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
var mgr = (INetFwMgr)Activator.CreateInstance(netFwMgrType);
var ports = mgr.LocalPolicy.CurrentProfile.GloballyOpenPorts;
var portNumber = 8989;
foreach (INetFwOpenPort p in ports)
{
if (p.Name == "NzbDrone")
{
portNumber = p.Port;
break;
}
}
if (portNumber != _configFileProvider.Port)
{
ports.Remove(portNumber, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP);
}
}
catch (Exception ex)
{
_logger.WarnException("Failed to close port in firewall for NzbDrone", ex);
}
}
private bool IsFirewallEnabled() private bool IsFirewallEnabled()
{ {
if (OsInfo.IsLinux) return false;
try try
{ {
var netFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); var netFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
@ -135,7 +105,5 @@ private bool IsFirewallEnabled()
return false; return false;
} }
} }
} }
} }

View File

@ -9,6 +9,7 @@ namespace NzbDrone.Host.AccessControl
public interface IUrlAclAdapter public interface IUrlAclAdapter
{ {
void RefreshRegistration(); void RefreshRegistration();
string UrlAcl { get; }
} }
public class UrlAclAdapter : IUrlAclAdapter public class UrlAclAdapter : IUrlAclAdapter
@ -24,18 +25,25 @@ public UrlAclAdapter(IProcessProvider processProvider, IConfigFileProvider confi
_logger = logger; _logger = logger;
} }
public string UrlAcl
{
get
{
return "http://*:" + _configFileProvider.Port + "/";
}
}
public void RefreshRegistration() public void RefreshRegistration()
{ {
if (OsInfo.Version.Major < 6) if (OsInfo.Version.Major < 6)
return; return;
RegisterUrl(_configFileProvider.Port); RegisterUrl();
} }
private void RegisterUrl()
private void RegisterUrl(int portNumber)
{ {
var arguments = String.Format("http add urlacl http://*:{0}/ sddl=D:(A;;GX;;;S-1-1-0)", portNumber); var arguments = String.Format("http add urlacl {0} sddl=D:(A;;GX;;;S-1-1-0)", UrlAcl);
RunNetsh(arguments); RunNetsh(arguments);
} }

View File

@ -4,7 +4,6 @@
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Host.AccessControl;
using NzbDrone.Host.Owin; using NzbDrone.Host.Owin;
namespace NzbDrone.Host namespace NzbDrone.Host
@ -23,13 +22,10 @@ public class NzbDroneServiceFactory : ServiceBase, INzbDroneServiceFactory
private readonly IProcessProvider _processProvider; private readonly IProcessProvider _processProvider;
private readonly PriorityMonitor _priorityMonitor; private readonly PriorityMonitor _priorityMonitor;
private readonly IStartupArguments _startupArguments; private readonly IStartupArguments _startupArguments;
private readonly IFirewallAdapter _firewallAdapter;
private readonly IUrlAclAdapter _urlAclAdapter;
private readonly Logger _logger; private readonly Logger _logger;
public NzbDroneServiceFactory(IConfigFileProvider configFileProvider, IHostController hostController, IRuntimeInfo runtimeInfo, public NzbDroneServiceFactory(IConfigFileProvider configFileProvider, IHostController hostController, IRuntimeInfo runtimeInfo,
IProcessProvider processProvider, PriorityMonitor priorityMonitor, IStartupArguments startupArguments, IProcessProvider processProvider, PriorityMonitor priorityMonitor, IStartupArguments startupArguments, Logger logger)
IFirewallAdapter firewallAdapter, IUrlAclAdapter urlAclAdapter, Logger logger)
{ {
_configFileProvider = configFileProvider; _configFileProvider = configFileProvider;
_hostController = hostController; _hostController = hostController;
@ -37,8 +33,6 @@ public NzbDroneServiceFactory(IConfigFileProvider configFileProvider, IHostContr
_processProvider = processProvider; _processProvider = processProvider;
_priorityMonitor = priorityMonitor; _priorityMonitor = priorityMonitor;
_startupArguments = startupArguments; _startupArguments = startupArguments;
_firewallAdapter = firewallAdapter;
_urlAclAdapter = urlAclAdapter;
_logger = logger; _logger = logger;
} }
@ -49,11 +43,6 @@ protected override void OnStart(string[] args)
public void Start() public void Start()
{ {
if (OsInfo.IsWindows && _runtimeInfo.IsAdmin)
{
_urlAclAdapter.RefreshRegistration();
_firewallAdapter.MakeAccessible();
}
_hostController.StartServer(); _hostController.StartServer();
if (!_startupArguments.Flags.Contains(StartupArguments.NO_BROWSER) && if (!_startupArguments.Flags.Contains(StartupArguments.NO_BROWSER) &&

View File

@ -4,7 +4,6 @@ public interface IHostController
{ {
string AppUrl { get; } string AppUrl { get; }
void StartServer(); void StartServer();
void RestartServer();
void StopServer(); void StopServer();
} }
} }

View File

@ -3,8 +3,10 @@
using System.Linq; using System.Linq;
using Microsoft.Owin.Hosting; using Microsoft.Owin.Hosting;
using NLog; using NLog;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Security; using NzbDrone.Common.Security;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Host.AccessControl;
using NzbDrone.Host.Owin.MiddleWare; using NzbDrone.Host.Owin.MiddleWare;
using Owin; using Owin;
@ -14,13 +16,20 @@ public class OwinHostController : IHostController
{ {
private readonly IConfigFileProvider _configFileProvider; private readonly IConfigFileProvider _configFileProvider;
private readonly IEnumerable<IOwinMiddleWare> _owinMiddleWares; private readonly IEnumerable<IOwinMiddleWare> _owinMiddleWares;
private readonly IRuntimeInfo _runtimeInfo;
private readonly IUrlAclAdapter _urlAclAdapter;
private readonly IFirewallAdapter _firewallAdapter;
private readonly Logger _logger; private readonly Logger _logger;
private IDisposable _host; private IDisposable _host;
public OwinHostController(IConfigFileProvider configFileProvider, IEnumerable<IOwinMiddleWare> owinMiddleWares, Logger logger) public OwinHostController(IConfigFileProvider configFileProvider, IEnumerable<IOwinMiddleWare> owinMiddleWares,
IRuntimeInfo runtimeInfo, IUrlAclAdapter urlAclAdapter, IFirewallAdapter firewallAdapter, Logger logger)
{ {
_configFileProvider = configFileProvider; _configFileProvider = configFileProvider;
_owinMiddleWares = owinMiddleWares; _owinMiddleWares = owinMiddleWares;
_runtimeInfo = runtimeInfo;
_urlAclAdapter = urlAclAdapter;
_firewallAdapter = firewallAdapter;
_logger = logger; _logger = logger;
} }
@ -28,14 +37,18 @@ public void StartServer()
{ {
IgnoreCertErrorPolicy.Register(); IgnoreCertErrorPolicy.Register();
var url = "http://*:" + _configFileProvider.Port; if (OsInfo.IsWindows && _runtimeInfo.IsAdmin)
{
_urlAclAdapter.RefreshRegistration();
_firewallAdapter.MakeAccessible();
}
var options = new StartOptions(url) var options = new StartOptions(_urlAclAdapter.UrlAcl)
{ {
ServerFactory = "Microsoft.Owin.Host.HttpListener" ServerFactory = "Microsoft.Owin.Host.HttpListener"
}; };
_logger.Info("starting server on {0}", url); _logger.Info("starting server on {0}", _urlAclAdapter.UrlAcl);
_host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp); _host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp);
} }
@ -56,14 +69,6 @@ public string AppUrl
get { return string.Format("http://localhost:{0}", _configFileProvider.Port); } get { return string.Format("http://localhost:{0}", _configFileProvider.Port); }
} }
public void RestartServer()
{
_logger.Warn("Attempting to restart server.");
StopServer();
StartServer();
}
public void StopServer() public void StopServer()
{ {
if (_host == null) return; if (_host == null) return;

View File

@ -83,6 +83,10 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net40\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="NLog, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NLog.2.0.1.2\lib\net40\NLog.dll</HintPath>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL"> <Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath> <HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using NLog;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Host; using NzbDrone.Host;
using NzbDrone.SysTray; using NzbDrone.SysTray;
@ -8,6 +9,8 @@ namespace NzbDrone
{ {
public static class WindowsApp public static class WindowsApp
{ {
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public static void Main(string[] args) public static void Main(string[] args)
{ {
try try
@ -21,6 +24,7 @@ public static void Main(string[] args)
} }
catch (Exception e) catch (Exception e)
{ {
Logger.FatalException(e.Message, e);
var message = string.Format("{0}: {1}", e.GetType().Name, e.Message); var message = string.Format("{0}: {1}", e.GetType().Name, e.Message);
MessageBox.Show(text: message, buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error, caption: "Epic Fail!"); MessageBox.Show(text: message, buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error, caption: "Epic Fail!");
} }

View File

@ -5,5 +5,6 @@
<package id="Microsoft.Owin" version="1.1.0-beta2" targetFramework="net40" /> <package id="Microsoft.Owin" version="1.1.0-beta2" targetFramework="net40" />
<package id="Microsoft.Owin.Hosting" version="1.1.0-beta2" targetFramework="net40" /> <package id="Microsoft.Owin.Hosting" version="1.1.0-beta2" targetFramework="net40" />
<package id="Newtonsoft.Json" version="5.0.6" targetFramework="net40" /> <package id="Newtonsoft.Json" version="5.0.6" targetFramework="net40" />
<package id="NLog" version="2.0.1.2" targetFramework="net40" />
<package id="Owin" version="1.0" targetFramework="net40" /> <package id="Owin" version="1.0" targetFramework="net40" />
</packages> </packages>