public PackageInstallationService(InstallationTaskQueue pendingInstalls, RunningInstallationTaskList runningInstalls, CompletedInstallationTaskList completedInstalls, IDeploymentService deploymentService, ILogger logger, IHubCommunicator hubCommunicator, ILocalPackageCache agentCache, IInstalledPackageArchive installCache, RunningInstallationTaskList runningTasks, IAgentSettingsManager settingsManager, IPackagesList allPackagesList, CurrentlyDownloadingList currentlyDownloadingList, INotificationService notificationService) { CompletedInstalls = completedInstalls; _deploymentService = deploymentService; _logger = logger; _hubCommunicator = hubCommunicator; _agentCache = agentCache; _installCache = installCache; _runningTasks = runningTasks; _settingsManager = settingsManager; _allPackagesList = allPackagesList; _currentlyDownloadingList = currentlyDownloadingList; _notificationService = notificationService; PendingInstalls = pendingInstalls; RunningInstalls = runningInstalls; TimedTask = new TimedSingleExecutionTask(5000, CheckForNewInstallations, _logger); }
public PackageDownloadingService(IAgentSettingsManager agentSettingsManager, IRetrievePackageQuery allPackagesQuery, ILocalPackageCache agentCache, IAgentConfigurationManager agentConfigurationManager, ILogger logger, IHubCommunicator hubCommunicator, IInstalledPackageArchive installCache, IPackageRepositoryFactory packageRepositoryFactory, IPackagesList allPackagesList, ICurrentlyDownloadingList currentlyDownloadingList, CompletedInstallationTaskList installationResults, IAgentWatchList watchList, IInstallationManager installationManager,INotificationService notificationService) { _settingsManager = agentSettingsManager; AllPackagesQuery = allPackagesQuery; AgentCache = agentCache; _agentConfigurationManager = agentConfigurationManager; _logger = logger; _hubCommunicator = hubCommunicator; _installCache = installCache; _packageRepository = packageRepositoryFactory.CreateRepository(agentSettingsManager.Settings.NuGetRepository); _allPackagesList = allPackagesList; _currentlyDownloadingList = currentlyDownloadingList; _installationResults = installationResults; _watchList = watchList; _installationManager = installationManager; _notificationService = notificationService; TimedTask = new TimedSingleExecutionTask(agentSettingsManager.Settings.PackageSyncIntervalMs, FetchPackages, _logger); }
public static AgentStatusReport BuildStatus(IPackagesList availablePackages, ILocalPackageCache packageCache, IInstalledPackageArchive installCache, RunningInstallationTaskList runningTasks, IAgentSettingsManager settingsManager, ICurrentlyDownloadingList currentlyDownloadingList, CompletedInstallationTaskList completedInstallations) { // copying these collections to variables because sometimes they get modified while building the status report object string[] updating = new string[currentlyDownloadingList != null ? currentlyDownloadingList.Count : 0]; if (currentlyDownloadingList != null) currentlyDownloadingList.CopyTo(updating, 0); IPackage[] packages = new IPackage[availablePackages != null ? availablePackages.Count : 0]; if (availablePackages != null) availablePackages.CopyTo(packages, 0); var watchedPackageList = availablePackages.GetWatched().ToList(); IPackage[] watchedPackages = new IPackage[watchedPackageList != null ? watchedPackageList.Count : 0]; if (watchedPackageList != null) watchedPackageList.CopyTo(watchedPackages); InstallationTask[] tasks=new InstallationTask[runningTasks != null ? runningTasks.Count : 0]; if (runningTasks != null) runningTasks.CopyTo(tasks); var status = new AgentStatusReport { packages = BuildPackageInformation(watchedPackages, installCache, tasks, completedInstallations), currentTasks = tasks.Select(t => { var installation = new InstallTaskViewModel(); installation.Messages = t.ProgressReports.Select(pr => pr.Message).ToArray(); if (t.Task != null) { installation.Status = Enum.GetName(typeof (TaskStatus), t.Task.Status); } installation.PackageId = t.PackageId; installation.Version = t.Version; installation.LastMessage = t.ProgressReports.Count > 0 ? t.ProgressReports. LastOrDefault(). Message : ""; return installation; }).ToList(), availableVersions = packages.Select(p => p.Version.ToString()).Distinct().OrderByDescending(s => s).ToList(), environment = settingsManager.Settings.DeploymentEnvironment, updating = updating.ToList(), isUpdating = currentlyDownloadingList.Downloading }; status.OutOfDate = status.packages.Any(p => p.OutOfDate); return status; }
public void SetUp() { _hubCommunicator = new Mock<IHubCommunicator>(); _agentSettings = new Mock<IAgentSettingsManager>(); _agentSettings.SetupGet(s=>s.Settings).Returns(new AgentSettings { DeploymentEnvironment = "Staging", PackageSyncIntervalMs = 1 }); _agentConfigManagerMock = new Mock<IAgentConfigurationManager>(); _agentConfigManagerMock.Setup(x => x.GetWatchedPackages(_agentSettings.Object.Settings.DeploymentEnvironment)).Returns(new List<WatchPackage> { new WatchPackage() { Name = PACKAGE_ID } }); _packageRepoMock = new Mock<IRetrievePackageQuery>(); _packageCacheMock = new Mock<ILocalPackageCache>(); _installCached = new Mock<IInstalledPackageArchive>(); _pds = new PackageDownloadingService(_agentSettings.Object, _packageRepoMock.Object, _packageCacheMock.Object, _agentConfigManagerMock.Object, _logger.Object, _hubCommunicator.Object, _installCached.Object, _packageRepositoryFactory.Object, _allPackagesList, _currentlyDownloadingList.Object, _installationResultDictionary.Object, _agentWatchList.Object, _installationManager.Object, new Mock<INotificationService>().Object); _allPackagesList = new AllPackagesList(_agentConfigManagerMock.Object, _agentSettings.Object.Settings); }
public HubCommunicationService(IHubCommunicator hubCommunicator, IPackagesList allPackagesList, ILocalPackageCache localPackageCache, IInstalledPackageArchive installCache, RunningInstallationTaskList runningTasks, IAgentSettingsManager settingsManager, ILogger logger, CurrentlyDownloadingList currentlyDownloadingList, CompletedInstallationTaskList completedInstalls, INotificationService notificationService) { _hubCommunicator = hubCommunicator; _allPackagesList = allPackagesList; _localPackageCache = localPackageCache; _installCache = installCache; _runningTasks = runningTasks; _settingsManager = settingsManager; _logger = logger; _currentlyDownloadingList = currentlyDownloadingList; CompletedInstalls = completedInstalls; _notificationService = notificationService; }
public static PackageListViewModel Convert(ILocalPackageCache cache, RunningInstallationTaskList runningTasks, IInstalledPackageArchive installPackageArchive, CompletedInstallationTaskList completedTasks, IAgentSettings agentSettings, IPackagesList allPackagesList) { var model = new PackageListViewModel(); var packagesById = allPackagesList.GetWatched().GroupBy(p => p.Id); foreach (var package in packagesById) { var packageInfo = new LocalPackageInformation { PackageId = package.Key }; var latestVersion = package.OrderByDescending(p=>p.Version).FirstOrDefault(); if (latestVersion != null) packageInfo.LatestAvailableVersion = latestVersion.Version.ToString(); var installedPackage = installPackageArchive.GetCurrentInstalledVersion(package.Key); packageInfo.InstalledVersion = installedPackage == null ? "0.0.0.0" : installedPackage.Version.ToString(); /*packageInfo.LastInstallationTask = completedTasks .Where(t => t.PackageId == package.Key).OrderByDescending(t => t.LogFileName) .FirstOrDefault();*/ packageInfo.CurrentTask = runningTasks.Count > 0 ? runningTasks .Where(t => t.PackageId == package.Key) .Select(t => { var lastOrDefault = t.ProgressReports.LastOrDefault(); return lastOrDefault != null ? new InstallTaskViewModel { Messages = t.ProgressReports.Select(pr => pr.Message).ToArray(), Status = Enum.GetName(typeof(TaskStatus), t.Task.Status), PackageId = t.PackageId, Version = t.Version, LastMessage = t.ProgressReports.Count > 0 ? lastOrDefault.Message : "" } : null; }).FirstOrDefault() : null; packageInfo.AvailableVersions = package.OrderByDescending(x => x.Version).Select(x => x.Version.ToString()).ToList(); if (latestVersion != null) { packageInfo.Tags = latestVersion.Tags.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var tag in packageInfo.Tags) { if (!model.Tags.Any(t => t.Equals(tag.ToLower()))) { model.Tags.Add(tag.ToLower()); } } } else { packageInfo.Tags = new string[0]; } model.Packages.Add(packageInfo); } model.CurrentTasks = runningTasks .Select(t => { var progressReport = t.ProgressReports.LastOrDefault(); return progressReport != null ? new InstallTaskViewModel { Messages = t.ProgressReports.Select(pr => pr.Message).ToArray(), Status = Enum.GetName(typeof (TaskStatus), t.Task.Status), PackageId = t.PackageId, Version = t.Version, LastMessage = t.ProgressReports.Count > 0 ? progressReport.Message : "" } : null; }).ToList(); model.AvailableVersions = allPackagesList.Select(p => p.Version.ToString()).Distinct().OrderByDescending(s => s); model.NugetRepository = agentSettings.NuGetRepository; return model; }