private async Task ProcessJobTaskResult(Task jobTask, string jobId, ExtensionPostInstallActions postInstallActions = ExtensionPostInstallActions.None) { ExtensionsRestoreJob job = await GetJob(jobId); if (job == null) { return; } if (jobTask.IsFaulted) { job.Status = ExtensionsRestoreStatus.Failed; job.Error = jobTask.Exception.InnerException?.Message; } else { job.Status = ExtensionsRestoreStatus.Succeeded; } job.EndTime = DateTimeOffset.Now; if (postInstallActions.HasFlag(ExtensionPostInstallActions.BringAppOnline)) { await FileMonitoringService.SetAppOfflineState(_applicationHostOptions.Value.ScriptPath, false); } await SaveJob(job); }
public async Task <IActionResult> InstallExtension(ExtensionPackageReference package, bool verifyConflict = true) { if (package == null) { return(BadRequest()); } if (verifyConflict) { // If a different version of this extension is already installed, conflict: var extensions = await _extensionsManager.GetExtensions(); if (extensions.Any(e => e.Id.Equals(package.Id) && !e.Version.Equals(package.Version))) { return(StatusCode(StatusCodes.Status409Conflict)); } } ExtensionsRestoreJob job = await CreateJob(package); string jobId = job.Id; var addTask = _extensionsManager.AddExtensions(package) .ContinueWith(t => ProcessJobTaskResult(t, jobId)); var apiModel = ApiModelUtility.CreateApiModel(job, Request, $"jobs/{job.Id}"); string action = $"{Request.Scheme}://{Request.Host.ToUriComponent()}{Url.Action(nameof(GetJobs), "Extensions", new { id = job.Id })}{Request.QueryString}"; return(Accepted(action, apiModel)); }
private async Task SaveJob(ExtensionsRestoreJob job) { string jobPath = Path.Combine(GetJobBasePath(), $"{job.Id}.json"); Directory.CreateDirectory(Path.GetDirectoryName(jobPath)); await FileUtility.WriteAsync(jobPath, JsonConvert.SerializeObject(job)); }
private async Task <ExtensionsRestoreJob> CreateJob() { var job = new ExtensionsRestoreJob(); await SaveJob(job); return(job); }
public async Task <IActionResult> GetJobs(string id) { ExtensionsRestoreJob job = await GetJob(id); if (job == null) { return(NotFound()); } var apiModel = ApiModelUtility.CreateApiModel(job, Request); return(Ok(apiModel)); }
private async Task <ExtensionsRestoreJob> CreateJob(ExtensionPackageReference package) { var job = new ExtensionsRestoreJob() { Properties = new Dictionary <string, string>() { { "id", package.Id }, { "version", package.Version } } }; await SaveJob(job); return(job); }
public async Task <IActionResult> InstallExtension(ExtensionPackageReferenceWithActions package, bool verifyConflict = true) { if (package == null) { return(BadRequest()); } if (_extensionBundleManager.IsExtensionBundleConfigured()) { return(BadRequest(Resources.ExtensionBundleBadRequestInstall)); } if (!_environment.IsPersistentFileSystemAvailable()) { return(BadRequest(Resources.ErrorInstallingExtension)); } if (verifyConflict) { // If a different version of this extension is already installed, conflict: var extensions = await _extensionsManager.GetExtensions(); if (extensions.Any(e => e.Id.Equals(package.Id) && !e.Version.Equals(package.Version))) { return(StatusCode(StatusCodes.Status409Conflict)); } } ExtensionsRestoreJob job = await CreateJob(package); string jobId = job.Id; Enum.TryParse(package.PostInstallActions, true, out ExtensionPostInstallActions postInstallActions); var addTask = _extensionsManager.AddExtensions(package) .ContinueWith(t => ProcessJobTaskResult(t, jobId, postInstallActions)); var apiModel = ApiModelUtility.CreateApiModel(job, Request, $"jobs/{job.Id}"); string action = $"{Request.Scheme}://{Request.Host.ToUriComponent()}{Url.Action(nameof(GetJobs), "Extensions", new { id = job.Id })}{Request.QueryString}"; return(Accepted(action, apiModel)); }
private async Task ProcessJobTaskResult(Task jobTask, string jobId) { ExtensionsRestoreJob job = await GetJob(jobId); if (job == null) { return; } if (jobTask.IsFaulted) { job.Status = ExtensionsRestoreStatus.Failed; job.Error = jobTask.Exception.InnerException?.Message; } else { job.Status = ExtensionsRestoreStatus.Succeeded; } job.EndTime = DateTimeOffset.Now; await SaveJob(job); }