private async Task <IActionResult> TakeBackup(BackupRequestBody backupRequest, Data.BackupOption backupOption) { var error = this.ValidateRequest(backupRequest); if (!error.IsValid) { return(BadRequest(error)); } if (!this.backupParserManager.HasParsingFinished()) { Response.StatusCode = 423; // resource locked at this time. return(new JsonResult(new Dictionary <string, string>() { { "status", "inprogress" }, { "reason", "Backup parsing is still going on. " } })); } var timeout = TimeSpan.FromSeconds(backupRequest.TimeoutInSecs); var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(backupRequest.TimeoutInSecs)); var cancellationToken = cancellationTokenSource.Token; this.UserBackupLocation = String.IsNullOrWhiteSpace(backupRequest.BackupLocation) ? Directory.GetCurrentDirectory() : backupRequest.BackupLocation; await this.backupParserManager.BackupParser.BackupAsync(backupOption, timeout, cancellationToken, this.OnBackupCompletionAsync); return(new JsonResult(new Dictionary <string, string>() { { "status", "success" }, { "backPath", this.BackupPath }, })); }
private ModelStateDictionary ValidateRequest(BackupRequestBody backupRequest) { var error = new ModelStateDictionary(); if (backupRequest.CancellationTokenInSecs == 0) { error.AddModelError("CancellationTokenInSecs", new MissingFieldException("CancellationTokenInSecs is a required argument")); } if (backupRequest.TimeoutInSecs == 0) { error.AddModelError("TimeoutInSecs", new MissingFieldException("TimeoutInSecs is a required argument")); } return(error); }
public async Task <IActionResult> PostIncrementalBackup([FromBody] BackupRequestBody backupRequest) { return(await TakeBackup(backupRequest, BackupOption.Incremental)); }