diff --git a/.gitignore b/.gitignore index 31ea5068e..b57d38499 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,5 @@ NzbDrone.Web/NzbDrone.Web.Publish.xml _rawPackage/ NzbDrone.zip NzbDrone.sln.DotSettings.user* -config.xml \ No newline at end of file +config.xml +UpdateLogs/ \ No newline at end of file diff --git a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj b/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj index ffdf61160..bf433394f 100644 --- a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj +++ b/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj @@ -40,6 +40,7 @@ ..\packages\Moq.4.0.10827\lib\NET40\Moq.dll + ..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/StartUpdateFixture.cs b/NzbDrone.Core.Test/JobTests/AppUpdateJobFixture.cs similarity index 86% rename from NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/StartUpdateFixture.cs rename to NzbDrone.Core.Test/JobTests/AppUpdateJobFixture.cs index 13e3b7d33..d938605fc 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/StartUpdateFixture.cs +++ b/NzbDrone.Core.Test/JobTests/AppUpdateJobFixture.cs @@ -1,20 +1,21 @@ -using System; +using System.Linq; +using System; using System.Diagnostics; using System.IO; using FluentAssertions; using Moq; using NUnit.Framework; -using Ninject.Activation.Strategies; using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Providers.Jobs; using NzbDrone.Core.Test.Framework; -namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests +namespace NzbDrone.Core.Test.JobTests { [TestFixture] - internal class StartUpdateFixture : CoreTest + internal class AppUpdateJobFixture : CoreTest { private const string SANDBOX_FOLDER = @"C:\Temp\nzbdrone_update\"; @@ -32,6 +33,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests { Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); Mocker.GetMock().SetupGet(c => c.Guid).Returns(_clientGuid); + Mocker.GetMock().Setup(c => c.GetAvilableUpdate()).Returns(updatePackage); } @@ -41,7 +43,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests Mocker.GetMock().Setup(c => c.FolderExists(SANDBOX_FOLDER)).Returns(true); //Act - Mocker.Resolve().StartUpdate(updatePackage); + StartUpdate(); //Assert Mocker.GetMock().Verify(c => c.DeleteFolder(SANDBOX_FOLDER, true)); @@ -53,7 +55,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests Mocker.GetMock().Setup(c => c.FolderExists(SANDBOX_FOLDER)).Returns(false); //Act - Mocker.Resolve().StartUpdate(updatePackage); + StartUpdate(); //Assert Mocker.GetMock().Verify(c => c.DeleteFolder(SANDBOX_FOLDER, true), Times.Never()); @@ -65,7 +67,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName); //Act - Mocker.Resolve().StartUpdate(updatePackage); + StartUpdate(); //Assert Mocker.GetMock().Verify( @@ -78,7 +80,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName); //Act - Mocker.Resolve().StartUpdate(updatePackage); + StartUpdate(); //Assert Mocker.GetMock().Verify( @@ -91,7 +93,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests var updateClientFolder = Mocker.GetMock().Object.GetUpdateClientFolder(); //Act - Mocker.Resolve().StartUpdate(updatePackage); + StartUpdate(); //Assert Mocker.GetMock().Verify( @@ -108,7 +110,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests .SetupGet(c => c.NzbDroneProcessIdFromEnviroment).Returns(12); //Act - Mocker.Resolve().StartUpdate(updatePackage); + StartUpdate(); //Assert Mocker.GetMock().Verify( @@ -134,7 +136,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests Mocker.Resolve(); Mocker.Resolve(); Mocker.Resolve(); - Mocker.Resolve().StartUpdate(updatePackage); + StartUpdate(); updateSubFolder.Refresh(); //Assert @@ -143,5 +145,10 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests updateSubFolder.GetDirectories().Should().HaveCount(1); updateSubFolder.GetFiles().Should().HaveCount(1); } + + private void StartUpdate() + { + Mocker.Resolve().Start(MockNotification, 0, 0); + } } } diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index ffefc8161..734ca6950 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -95,7 +95,7 @@ - + diff --git a/NzbDrone.Core/Providers/Jobs/AppUpdateJob.cs b/NzbDrone.Core/Providers/Jobs/AppUpdateJob.cs index f404f7bef..8dff9d465 100644 --- a/NzbDrone.Core/Providers/Jobs/AppUpdateJob.cs +++ b/NzbDrone.Core/Providers/Jobs/AppUpdateJob.cs @@ -1,14 +1,35 @@ -using NzbDrone.Core.Model.Notification; +using System.Diagnostics; +using System.IO; +using NLog; +using NzbDrone.Common; +using NzbDrone.Core.Model.Notification; +using NzbDrone.Core.Providers.Core; namespace NzbDrone.Core.Providers.Jobs { public class AppUpdateJob : IJob { private readonly UpdateProvider _updateProvider; + private readonly EnviromentProvider _enviromentProvider; + private readonly DiskProvider _diskProvider; + private readonly HttpProvider _httpProvider; + private readonly ProcessProvider _processProvider; + private readonly ArchiveProvider _archiveProvider; + private readonly ConfigFileProvider _configFileProvider; - public AppUpdateJob(UpdateProvider updateProvider) + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + + public AppUpdateJob(UpdateProvider updateProvider, EnviromentProvider enviromentProvider, DiskProvider diskProvider, + HttpProvider httpProvider, ProcessProvider processProvider, ArchiveProvider archiveProvider, ConfigFileProvider configFileProvider) { _updateProvider = updateProvider; + _enviromentProvider = enviromentProvider; + _diskProvider = diskProvider; + _httpProvider = httpProvider; + _processProvider = processProvider; + _archiveProvider = archiveProvider; + _configFileProvider = configFileProvider; } public string Name @@ -27,7 +48,38 @@ namespace NzbDrone.Core.Providers.Jobs var updatePackage = _updateProvider.GetAvilableUpdate(); - _updateProvider.StartUpdate(updatePackage); + var packageDestination = Path.Combine(_enviromentProvider.GetUpdateSandboxFolder(), updatePackage.FileName); + + if (_diskProvider.FolderExists(_enviromentProvider.GetUpdateSandboxFolder())) + { + logger.Info("Deleting old update files"); + _diskProvider.DeleteFolder(_enviromentProvider.GetUpdateSandboxFolder(), true); + } + + logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); + notification.CurrentMessage = "Downloading Update " + updatePackage.Version; + _httpProvider.DownloadFile(updatePackage.Url, packageDestination); + logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); + + logger.Info("Extracting Update package"); + notification.CurrentMessage = "Extracting Update"; + _archiveProvider.ExtractArchive(packageDestination, _enviromentProvider.GetUpdateSandboxFolder()); + logger.Info("Update package extracted successfully"); + + logger.Info("Preparing client"); + notification.CurrentMessage = "Preparing to start Update"; + _diskProvider.CopyDirectory(_enviromentProvider.GetUpdateClientFolder(), _enviromentProvider.GetUpdateSandboxFolder()); + + + logger.Info("Starting update client"); + var startInfo = new ProcessStartInfo() + { + FileName = _enviromentProvider.GetUpdateClientExePath(), + Arguments = string.Format("{0} {1}", _enviromentProvider.NzbDroneProcessIdFromEnviroment, _configFileProvider.Guid) + }; + + var updateProcess = _processProvider.Start(startInfo); + logger.Info("Update in progress. NzbDrone will restart shortly."); } } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/UpdateProvider.cs b/NzbDrone.Core/Providers/UpdateProvider.cs index c675bd606..040a689b6 100644 --- a/NzbDrone.Core/Providers/UpdateProvider.cs +++ b/NzbDrone.Core/Providers/UpdateProvider.cs @@ -77,39 +77,5 @@ namespace NzbDrone.Core.Providers logger.Trace("No updates available"); return null; } - - public virtual void StartUpdate(UpdatePackage updatePackage) - { - var packageDestination = Path.Combine(_enviromentProvider.GetUpdateSandboxFolder(), updatePackage.FileName); - - if (_diskProvider.FolderExists(_enviromentProvider.GetUpdateSandboxFolder())) - { - logger.Info("Deleting old update files"); - _diskProvider.DeleteFolder(_enviromentProvider.GetUpdateSandboxFolder(), true); - } - - logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); - _httpProvider.DownloadFile(updatePackage.Url, packageDestination); - logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); - - logger.Info("Extracting Update package"); - _archiveProvider.ExtractArchive(packageDestination, _enviromentProvider.GetUpdateSandboxFolder()); - logger.Info("Update package extracted successfully"); - - logger.Info("Preparing client"); - _diskProvider.CopyDirectory(_enviromentProvider.GetUpdateClientFolder(), _enviromentProvider.GetUpdateSandboxFolder()); - - - logger.Info("Starting update client"); - var startInfo = new ProcessStartInfo() - { - FileName = _enviromentProvider.GetUpdateClientExePath(), - Arguments = string.Format("{0} {1}", _enviromentProvider.NzbDroneProcessIdFromEnviroment, _configFileProvider.Guid) - }; - - _processProvider.Start(startInfo); - - } - } } diff --git a/NzbDrone.Update/NzbDrone.Update.csproj b/NzbDrone.Update/NzbDrone.Update.csproj index 1212ac035..772718f70 100644 --- a/NzbDrone.Update/NzbDrone.Update.csproj +++ b/NzbDrone.Update/NzbDrone.Update.csproj @@ -35,6 +35,7 @@ 4 + ..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll diff --git a/NzbDrone.Update/Program.cs b/NzbDrone.Update/Program.cs index 2702780b3..8792aa85d 100644 --- a/NzbDrone.Update/Program.cs +++ b/NzbDrone.Update/Program.cs @@ -4,6 +4,7 @@ using System.Linq; using NLog; using NLog.Config; using NLog.Targets; +using Ninject; using NzbDrone.Common; using NzbDrone.Update.Providers; @@ -13,6 +14,7 @@ namespace NzbDrone.Update { private readonly UpdateProvider _updateProvider; private readonly ProcessProvider _processProvider; + private static StandardKernel _kernel; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); @@ -29,18 +31,10 @@ namespace NzbDrone.Update Console.WriteLine("Starting NzbDrone Update Client"); InitLoggers(); - logger.Info("Initializing update application"); - var enviromentProvider = new EnviromentProvider(); - var processProvider = new ProcessProvider(); - var serviceProvider = new ServiceProvider(); - var diskProvider = new DiskProvider(); - var iisProvider = new IISProvider(); - - var updateProvider = new UpdateProvider(diskProvider, serviceProvider, processProvider, enviromentProvider, iisProvider); - - new Program(updateProvider, processProvider).Start(args); + _kernel = new StandardKernel(); + _kernel.Get().Start(args); } catch (Exception e) { @@ -55,8 +49,8 @@ namespace NzbDrone.Update { try { - var enviromentProvider = new EnviromentProvider(); - var diskProvider = new DiskProvider(); + var enviromentProvider = _kernel.Get(); + var diskProvider = _kernel.Get(); logger.Info("Copying log tiles to application directory."); diskProvider.CopyDirectory(enviromentProvider.GetSandboxLogFolder(), enviromentProvider.GetUpdateLogFolder()); } @@ -70,18 +64,19 @@ namespace NzbDrone.Update { LogConfiguration.RegisterConsoleLogger(LogLevel.Trace); LogConfiguration.RegisterUdpLogger(); - LogConfiguration.RegisterExceptioneer(); + var lastUpgradeLog = new FileTarget(); lastUpgradeLog.AutoFlush = true; lastUpgradeLog.ConcurrentWrites = false; lastUpgradeLog.FileName = Path.Combine(PathExtentions.UPDATE_LOG_FOLDER_NAME, DateTime.Now.ToString("yyyy.MM.dd-H-mm") + ".txt"); lastUpgradeLog.KeepFileOpen = false; - lastUpgradeLog.Layout = "${longdate} - ${logger}: ${message} ${exception}"; + lastUpgradeLog.Layout = "${longdate} - ${logger}: ${message} ${exception:format=ToString}"; LogManager.Configuration.AddTarget(lastUpgradeLog.GetType().Name, lastUpgradeLog); LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, lastUpgradeLog)); + LogConfiguration.RegisterExceptioneer(); LogConfiguration.Reload(); } diff --git a/config.xml b/config.xml deleted file mode 100644 index 6a1a578ab..000000000 --- a/config.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 8989 - 0 - true - \ No newline at end of file