Esempio n. 1
0
        private async Task <string[]> AskForItemsAgent(Guid serverId)
        {
            var server = await metaDB.GetWindowsServer(serverId, true);

            if (server == null)
            {
                return(null);
            }

            var proxy  = new WindowsProxy(server.Ip, server.Username, server.Password);
            var drives = await proxy.GetDrives();

            var items = new List <string>();

            await outStream.WriteLineAsync("Choose something to backup");

            var i = 0;

            foreach (var drive in drives)
            {
                await outStream.WriteLineAsync(
                    $"{i++} / {drive}");
            }
            await outStream.WriteAsync("number to add -or- g number to go deeper -or- b to go back > ");

            var rawInput = await inStream.ReadLineAsync() ?? "";

            var stringArray = rawInput.Split(' ', StringSplitOptions.RemoveEmptyEntries);

            return(items.ToArray());
        }
Esempio n. 2
0
        public void Initialize()
        {
            //get the grandparent folder of DeploymentDirectory to share with scraper
            resultDir = Directory.GetParent(Directory.GetParent(TestContext.DeploymentDirectory).FullName).FullName;
            Console.WriteLine("resultDir = {0}", resultDir);

            /* initialize a proxy and command handler */
            proxy = new WindowsProxy(new RootForm())
            {
                bPasscodeVerified = true
            };
            cmdhlr           = new CommandHandler(null, null, proxy);
            conn             = new DummyConnection();
            proxy.connection = conn;
        }
Esempio n. 3
0
        private WindowsProxy GetWindowsProxy(Guid id)
        {
            WindowsProxy proxy;

            lock (windowsProxies)
            {
                if (!windowsProxies.TryGetValue(id, out proxy))
                {
                    var server = metaDB.GetWindowsServerSync(id, true);
                    if (server == null)
                    {
                        return(null);
                    }
                    proxy = new WindowsProxy(server.Ip, server.Username, server.Password);
                    windowsProxies.Add(id, proxy);
                }
            }

            return(proxy);
        }
Esempio n. 4
0
        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;
        }