protected override async Task OnTimer() { try { //Skip if network not available if (!NetworkStatus.CanDownload(_downloadNetworkPriority)) { _logger?.LogInformation($"Skip package download due to network not allowed to download."); return; } _logger?.LogDebug($"Running package updater. Downloading {this.PackageVersion}."); PackageVersionInfo packageVersion = await GetPackageVersionInformation(); var desiredVersion = UpdateUtility.ParseVersion(packageVersion.Version); Version installedVersion = GetInstalledVersion(); if (desiredVersion.CompareTo(installedVersion) != 0) { _logger?.LogInformation($"The desired version of {desiredVersion} is different to installed version {installedVersion}."); await DownloadAndInstallNewVersionAsync(packageVersion); } } catch (Exception ex) { _logger?.LogError($"Error download {this.PackageVersion}. Exception: {ex.ToMinimized()}"); } }
/// <summary> /// Download the new version of KinesisTap build using package Url and install it. /// </summary> /// <param name="packageVersion">an instance of <see cref="PackageVersionInfo"/> object.</param> public async Task DownloadAndInstallNewVersionAsync(PackageVersionInfo packageVersion) { //Upload the new version string packageUrl = packageVersion.PackageUrl.Replace("{Version}", packageVersion.Version); string extension = Path.GetExtension(packageUrl).ToLower(); if (!IsExtensionSuportedByPlatform(extension)) { _logger.LogWarning($"Extension {extension} is not supported on {Utility.Platform}"); return; } _logger?.LogInformation($"Downloading {packageVersion.Name} version {packageVersion.Version} from {packageUrl}..."); IFileDownloader downloader = CreateDownloaderFromUrl(packageUrl, _context); string updateDirectory = "update"; if (!Directory.Exists(updateDirectory)) { Directory.CreateDirectory(updateDirectory); } string downloadPath = Path.Combine(updateDirectory, Path.GetFileName(packageUrl)); if (File.Exists(downloadPath)) { File.Delete(downloadPath); } await downloader.DownloadFileAsync(packageUrl, downloadPath); _logger?.LogInformation($"Package downloaded to {downloadPath}. Expanding package..."); if (!_skipSignatureVerification) { if (EXT_MSI.Equals(extension, StringComparison.Ordinal)) { if (!await VerifyAuthenticodeSignatureAsync(_appDataFileProvider.GetFullPath(downloadPath))) { PublishCounter(UpdateMetricsConstants.PackageSignaturesInvalid, CounterTypeEnum.Increment, 1); _logger.LogWarning("Cannot verify digital signature for package {0}", downloadPath); return; } PublishCounter(UpdateMetricsConstants.PackageSignaturesValid, CounterTypeEnum.Increment, 1); } } else { _logger.LogInformation("Skipping digital signature verification"); } if (EXT_NUPKG.Equals(extension)) { await InstallNugetPackageAsync(downloadPath); } else { await InstallPackageAsync(downloadPath); } }
/// <summary> /// Check for agent update. It will trigger agent update if the desired version is different than the current running version. /// </summary> internal async Task CheckAgentUpdates() { _logger?.LogDebug($"Running package updater. Downloading {this.PackageVersion}."); PackageVersionInfo packageVersion = await GetPackageVersionInformation(); var desiredVersion = UpdateUtility.ParseVersion(packageVersion.Version); Version installedVersion = GetInstalledVersion(); if (desiredVersion.CompareTo(installedVersion) != 0) { _logger?.LogInformation($"The desired version of {desiredVersion} is different to installed version {installedVersion}."); await this.packageInstaller.DownloadAndInstallNewVersionAsync(packageVersion); } }
protected override async Task OnTimer() { try { _logger?.LogDebug($"Running package updater. Downloading {this.PackageVersion}."); PackageVersionInfo packageVersion = await GetPackageVersionInformation(); var desiredVersion = UpdateUtility.ParseVersion(packageVersion.Version); Version installedVersion = GetInstalledVersion(); if (desiredVersion.CompareTo(installedVersion) != 0) { _logger?.LogInformation($"The desired version of {desiredVersion} is different to installed version {installedVersion}."); await DownloadAndInstallNewVersionAsync(packageVersion); } } catch (Exception ex) { _logger?.LogError($"Error download {this.PackageVersion}. Exception: {ex.ToAsyncString()}"); } }
/// <summary> /// Download the new version of KinesisTap build using package Url and install it. /// </summary> /// <param name="packageVersion">an instance of <see cref="PackageVersionInfo"/> object.</param> public async Task DownloadAndInstallNewVersionAsync(PackageVersionInfo packageVersion) { //Upload the new version string packageUrl = packageVersion.PackageUrl.Replace("{Version}", packageVersion.Version); string extension = Path.GetExtension(packageUrl).ToLower(); if (!IsExtensionSuportedByPlatform(extension)) { _logger.LogWarning($"Extension {extension} is not supported on {Utility.Platform}"); return; } _logger?.LogInformation($"Downloading {packageVersion.Name} version {packageVersion.Version} from {packageUrl}..."); IFileDownloader downloader = UpdateUtility.CreateDownloaderFromUrl(packageUrl, this._context); string updateDirectory = Path.Combine(Utility.GetKinesisTapProgramDataPath(), "update"); if (!Directory.Exists(updateDirectory)) { Directory.CreateDirectory(updateDirectory); } string downloadPath = Path.Combine(updateDirectory, Path.GetFileName(packageUrl)); if (File.Exists(downloadPath)) { File.Delete(downloadPath); } await downloader.DownloadFileAsync(packageUrl, downloadPath); _logger?.LogInformation($"Package downloaded to {downloadPath}. Expanding package..."); if (EXT_NUPKG.Equals(extension)) { await InstallNugetPackageAsync(downloadPath); } else { await InstallPackageAsync(downloadPath); } }
private async Task DownloadAndInstallNewVersionAsync(PackageVersionInfo packageVersion) { //Upload the new version string packageUrl = packageVersion.PackageUrl.Replace("{Version}", packageVersion.Version); _logger?.LogInformation($"Downloading {packageVersion.Name} version {packageVersion.Version} from {packageUrl}..."); IFileDownloader downloader = UpdateUtility.CreateDownloaderFromUrl(packageUrl, this._context); string updateDirectory = Path.Combine(Utility.GetKinesisTapProgramDataPath(), "update"); if (!Directory.Exists(updateDirectory)) { Directory.CreateDirectory(updateDirectory); } string downloadPath = Path.Combine(updateDirectory, $"KinesisTap.{packageVersion.Version}.nupkg"); if (File.Exists(downloadPath)) { File.Delete(downloadPath); } await downloader.DownloadFileAsync(packageUrl, downloadPath); _logger?.LogInformation($"Package downloaded to {downloadPath}. Expanding package..."); //Expand the new version string expandDirectory = downloadPath.Substring(0, downloadPath.Length - 6); //less ".nupkg" if (Directory.Exists(expandDirectory)) { Directory.Delete(expandDirectory, true); } ZipFile.ExtractToDirectory(downloadPath, expandDirectory); //Execute the ChocoInstall.ps1 out of process so that it can restart KinesisTap string installScriptPath = Path.Combine(expandDirectory, @"tools\chocolateyinstall.ps1"); _logger?.LogInformation($"Executing installation script {installScriptPath}..."); await ExecutePowershellOutOfProcessAsync(installScriptPath); }