public async Task <IActionResult> Get(Guid id) { return(Ok(await metaDB.GetBackup(id))); }
public async Task Run(Guid serverId, string[] items, CancellationToken ctoken = default) { if (backup != null) { return; } this.ctoken = ctoken; var server = await metaDB.GetWindowsServer(serverId, withcreds : true); agentProxy = new WindowsProxy(server.Ip, server.Username, server.Password) { BackupServiceCallback = this }; backup = new DBBackup { Server = serverId, StartDate = DateTime.Now.ToUniversalTime(), Status = Status.Running, Log = new List <string>() }; backup.Id = await metaDB.AddBackup(backup); backupStatus = Status.Successful; IObserver <CancellationTokenSource> observer = default; Observable.Interval(TimeSpan.FromSeconds(5)).TakeUntil( Observable.Create <CancellationTokenSource>(o => { observer = o; return(() => { }); })) .Subscribe(_ => { var b = metaDB.GetBackup(backup.Id).GetAwaiter().GetResult(); if (b.Status == Status.Cancelled) { ctokenCancelBackup.Cancel(); observer.OnNext(ctokenCancelBackup); } }); try { await agentProxy.Backup(items, backup.Id); foreach (var item in itemsQueue.GetConsumingEnumerable(ctoken)) { switch (item.Type) { case BackupItemType.File: { await BackupFile(item); } break; case BackupItemType.Folder: { await BackupFolder(item); } break; } } } catch (EndpointNotFoundException) { backup.AppendLog($"Cannot connect to server {server.Name} [{server.Ip}]"); backupStatus = Status.Failed; } catch (OperationCanceledException) { backupStatus = Status.Cancelled; } catch (Exception e) { backup.AppendLog($"General Error: {e.Message}"); backupStatus = Status.Failed; } finally { try { await agentProxy.BackupComplete(backup.Id); } catch (Exception) { } backup.Status = backupStatus; backup.EndDate = DateTime.Now.ToUniversalTime(); await metaDB.AddBackup(backup); } Console.WriteLine($"{DateTime.Now} - Backup ended"); Console.WriteLine($"{DateTime.Now} - Status: {backup.Status}"); backup = null; }