示例#1
0
        private async Task SendBackupProgressAsync(HttpPostBackupProgress progress)
        {
            var hyperV = await FindHypervisorByName(progress.Hypervisor);

            if (hyperV == null)
            {
                var vms = progress.BackupStates.Select(s => s.VmName).ToList();
                await UpdateHypervisorAsync(progress.Hypervisor, vms, null);

                hyperV = await FindHypervisorByName(progress.Hypervisor);
            }

            foreach (var state in progress.BackupStates)
            {
                var vm = hyperV.VirtualMachines.FirstOrDefault(v => v.Name.ToLower() == state.VmName.ToLower());

                if (vm == null)
                {
                    _logger.LogError("Could not find virtual machine with name \"{vm}\" for hypervisor \"{hv}\"",
                                     state.VmName, hyperV.Name);
                    return;
                }

                WriteCurrentStateToDB(vm, state);

                if (state.Status != BackupJobStatus.Idle)
                {
                    await WriteHistoryAsync(vm, state);
                }
            }

            await _context.SaveChangesAsync();
        }
示例#2
0
        private void ReportToCentralServer()
        {
            var states = new List <BackupState>();

            foreach (var vm in monitoredVMs)
            {
                int percent = 0;

                switch (vm.Status)
                {
                case BackupJobStatus.Exporting:
                    percent = vm.ExportPercentComplete;
                    break;

                case BackupJobStatus.Archiving:
                    percent = vm.ArchivePercentComplete;
                    break;
                }

                var state = new BackupState()
                {
                    VmName           = vm.Name,
                    BackupStartDate  = vm.BackupStartDate,
                    BackupEndDate    = vm.BackupEndDate,
                    Status           = vm.Status,
                    PercentComplete  = percent,
                    ExportedToFolder = vm.ExportPath,
                    ArchivedToFile   = vm.ArchivePath,
                    LastBackup       = vm.LastBackup
                };

                states.Add(state);
            }

            var progress = new HttpPostBackupProgress();

            progress.Hypervisor   = Util.GetCurrentServerFQDN();
            progress.BackupStates = states;

            var result = _centralServer.SendBackupProgress(progress).Result;

            if (!result.Success)
            {
                _logger.LogError("Error occurred while send backup progress to central server. Error was: {err}",
                                 result.Message);
            }
        }
        public async Task <ApiResult> SendBackupProgress([FromBody] HttpPostBackupProgress progress)
        {
            try
            {
                await SendBackupProgressAsync(progress);
            }
            catch (Exception e)
            {
                _logger.LogError(e.ToString());
                return(new ApiResult()
                {
                    Success = false, Message = e.Message
                });
            }

            return(new ApiResult()
            {
                Success = true
            });
        }
示例#4
0
 public async Task <ApiResult> SendBackupProgress(HttpPostBackupProgress progress)
 {
     return(await DoPostRequest(UrlSendBackupProgress, progress));
 }