Beispiel #1
0
        private void BackupUpdateStatsInfo(BackupOperationStatus status, TransferStatus xferStatus)
        {
            if (RunningOperation == null)
            {
                return;
            }

            Models.BackupPlan     plan      = Model as Models.BackupPlan;
            BackupOperation       operation = RunningOperation as BackupOperation;
            BackupOperationReport report    = operation.Report;

            switch (status)
            {
            default: throw new ArgumentException("Unhandled status", "status");

            case BackupOperationStatus.Unknown:
            {
                break;
            }

            case BackupOperationStatus.Started:
            case BackupOperationStatus.Resumed:
            {
                logger.Info("{0} backup", status == BackupOperationStatus.Resumed ? "Resuming" : "Starting");

                // Update timestamps.
                plan.LastRunAt = DateTime.UtcNow;
                _daoBackupPlan.Update(plan);

                // Report
                Commands.OperationStatus cmdStatus = status == BackupOperationStatus.Started
                                                                ? Commands.OperationStatus.STARTED
                                                                : Commands.OperationStatus.RESUMED;
                Commands.GuiReportPlanStatus cmdData = BuildGuiReportPlanStatus(cmdStatus);
                string cmd = Commands.GuiReportOperationStatus("backup", plan.Id.Value, cmdData);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd);
                break;
            }

            case BackupOperationStatus.ScanningFilesStarted:
            {
                logger.Info("Scanning files...");

                // Report
                Commands.OperationStatus     cmdStatus = Commands.OperationStatus.SCANNING_FILES_STARTED;
                Commands.GuiReportPlanStatus cmdData   = BuildGuiReportPlanStatus(cmdStatus);
                string cmd = Commands.GuiReportOperationStatus("backup", plan.Id.Value, cmdData);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd);
                break;
            }

            case BackupOperationStatus.ScanningFilesFinished:
            {
                logger.Info("Scanning files finished.");

                // Report
                Commands.OperationStatus     cmdStatus = Commands.OperationStatus.SCANNING_FILES_FINISHED;
                Commands.GuiReportPlanStatus cmdData   = BuildGuiReportPlanStatus(cmdStatus);
                string cmd = Commands.GuiReportOperationStatus("backup", plan.Id.Value, cmdData);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd);
                break;
            }

            case BackupOperationStatus.ProcessingFilesStarted:
            {
                logger.Info("Processing files...");

                // Report
                Commands.OperationStatus     cmdStatus = Commands.OperationStatus.PROCESSING_FILES_STARTED;
                Commands.GuiReportPlanStatus cmdData   = BuildGuiReportPlanStatus(cmdStatus);
                string cmd = Commands.GuiReportOperationStatus("backup", plan.Id.Value, cmdData);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd);
                break;
            }

            case BackupOperationStatus.ProcessingFilesFinished:
            {
                logger.Info("Processing files finished.");
                logger.Info("Completed: {0} of {1}", report.TransferResults.Stats.Completed, report.TransferResults.Stats.Total);

                // Report
                Commands.OperationStatus cmdStatus = Commands.OperationStatus.PROCESSING_FILES_FINISHED;
                // Report sources
                Commands.GuiReportPlanStatus cmdData1 = BuildGuiReportPlanStatus(cmdStatus);
                string cmd1 = Commands.GuiReportOperationStatus("backup", plan.Id.Value, cmdData1);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd1);
                // Report counts
                Commands.GuiReportPlanProgress cmdData2 = BuildGuiReportPlanProgress(cmdStatus);
                string cmd2 = Commands.GuiReportOperationProgress("backup", plan.Id.Value, cmdData2);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd2);
                break;
            }

            case BackupOperationStatus.Finished:
            {
                //var message = string.Format(
                //	"Backup {0}! Stats: {1} completed, {2} failed, {3} canceled, {4} pending, {5} running",
                //	"finished",
                //	TransferResults.Stats.Completed, TransferResults.Stats.Failed,
                //	TransferResults.Stats.Canceled, TransferResults.Stats.Pending,
                //	TransferResults.Stats.Running);
                //logger.Info(message);

                // Update success timestamp.
                plan.LastSuccessfulRunAt = DateTime.UtcNow;
                _daoBackupPlan.Update(plan);

                // Signal to the other thread it may terminate.
                RunningOperationEndedEvent.Set();

                // Report
                Commands.OperationStatus     cmdStatus = Commands.OperationStatus.FINISHED;
                Commands.GuiReportPlanStatus cmdData   = BuildGuiReportPlanStatus(cmdStatus);
                string cmd = Commands.GuiReportOperationStatus("backup", plan.Id.Value, cmdData);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd);
                break;
            }

            case BackupOperationStatus.Updated:
            {
                if (xferStatus == TransferStatus.COMPLETED || xferStatus == TransferStatus.CANCELED || xferStatus == TransferStatus.FAILED)
                {
                    logger.Info("Completed: {0} of {1}", report.TransferResults.Stats.Completed, report.TransferResults.Stats.Total);
                }

                // Report
                Commands.OperationStatus       cmdStatus = Commands.OperationStatus.UPDATED;
                Commands.GuiReportPlanProgress cmdData   = BuildGuiReportPlanProgress(cmdStatus);
                string cmd = Commands.GuiReportOperationProgress("backup", plan.Id.Value, cmdData);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd);
                break;
            }

            case BackupOperationStatus.Failed:
            case BackupOperationStatus.Canceled:
            {
                //var message = string.Format(
                //	"Backup {0}! Stats: {1} completed, {2} failed, {3} canceled, {4} pending, {5} running",
                //	status == BackupOperationStatus.Failed ? "failed" : "was canceled",
                //	TransferResults.Stats.Completed, TransferResults.Stats.Failed,
                //	TransferResults.Stats.Canceled, TransferResults.Stats.Pending,
                //	TransferResults.Stats.Running);
                //logger.Info(message);

                // Signal to the other thread it may terminate.
                RunningOperationEndedEvent.Set();

                // Report
                Commands.OperationStatus cmdStatus = status == BackupOperationStatus.Failed
                                                        ? Commands.OperationStatus.FAILED : Commands.OperationStatus.CANCELED;
                Commands.GuiReportPlanStatus cmdData = BuildGuiReportPlanStatus(cmdStatus);
                string cmd = Commands.GuiReportOperationStatus("backup", plan.Id.Value, cmdData);
                Handler.Route(Commands.IPC_DEFAULT_GUI_CLIENT_NAME, cmd);
                break;
            }
            }
        }
Beispiel #2
0
        public override void OnFinish()
        {
            base.OnFinish();

            Models.BackupPlan plan = Model as Models.BackupPlan;

            Console.WriteLine("Name                  = {0}", plan.Name);
            Console.WriteLine("StorageAccount        = {0}", plan.StorageAccount.DisplayName);
            Console.WriteLine("StorageAccountType    = {0}", plan.StorageAccountType.ToString());
            foreach (Models.BackupPlanSourceEntry entry in plan.SelectedSources)
            {
                Console.WriteLine("SelectedSource => #{0}, {1}, {2}", entry.Id, entry.Type.ToString(), entry.Path);
            }
            Console.WriteLine("ScheduleType          = {0}", plan.ScheduleType.ToString());
            Console.WriteLine("Schedule.ScheduleType = {0}", plan.Schedule.ScheduleType.ToString());

            Models.PlanSchedule schedule = plan.Schedule;
            switch (plan.ScheduleType)
            {
            case Models.ScheduleTypeEnum.RUN_MANUALLY:
                break;

            case Models.ScheduleTypeEnum.SPECIFIC:
                Console.WriteLine("OccursSpecificallyAt  = {0}", schedule.OccursSpecificallyAt.HasValue ? schedule.OccursSpecificallyAt.Value.ToString() : "null");
                break;

            case Models.ScheduleTypeEnum.RECURRING:
                Console.WriteLine("RecurrencyFrequencyType      = {0}",
                                  schedule.RecurrencyFrequencyType.HasValue ? schedule.RecurrencyFrequencyType.Value.ToString() : "null");
                Console.WriteLine("RecurrencyDailyFrequencyType = {0}",
                                  schedule.RecurrencyDailyFrequencyType.HasValue ? schedule.RecurrencyDailyFrequencyType.Value.ToString() : "null");

                if (schedule.RecurrencyFrequencyType.HasValue)
                {
                    switch (schedule.RecurrencyFrequencyType.Value)
                    {
                    case Models.FrequencyTypeEnum.DAILY:
                        break;

                    case Models.FrequencyTypeEnum.WEEKLY:
                        Console.WriteLine("OccursAtDaysOfWeek           = {0}",
                                          schedule.OccursAtDaysOfWeek != null ? schedule.OccursAtDaysOfWeek.ToReadableString() : "null");
                        break;

                    case Models.FrequencyTypeEnum.MONTHLY:
                        Console.WriteLine("MonthlyOccurrenceType        = {0}",
                                          schedule.MonthlyOccurrenceType.HasValue ? schedule.MonthlyOccurrenceType.Value.ToString() : "null");
                        Console.WriteLine("OccursMonthlyAtDayOfWeek     = {0}",
                                          schedule.OccursMonthlyAtDayOfWeek.HasValue ? schedule.OccursMonthlyAtDayOfWeek.Value.ToString() : "null");
                        break;

                    case Models.FrequencyTypeEnum.DAY_OF_MONTH:
                        Console.WriteLine("OccursAtDayOfMonth           = {0}",
                                          schedule.OccursAtDayOfMonth.HasValue ? schedule.OccursAtDayOfMonth.Value.ToString() : "null");
                        break;
                    }
                }
                Console.WriteLine("RecurrencySpecificallyAtTime = {0}",
                                  schedule.RecurrencySpecificallyAtTime.HasValue ? schedule.RecurrencySpecificallyAtTime.Value.ToString() : "null");
                Console.WriteLine("RecurrencyTimeInterval       = {0}",
                                  schedule.RecurrencyTimeInterval.HasValue ? schedule.RecurrencyTimeInterval.Value.ToString() : "null");
                Console.WriteLine("RecurrencyTimeUnit           = {0}",
                                  schedule.RecurrencyTimeUnit.HasValue ? schedule.RecurrencyTimeUnit.Value.ToString() : "null");
                Console.WriteLine("RecurrencyWindowStartsAtTime = {0}",
                                  schedule.RecurrencyWindowStartsAtTime.HasValue ? schedule.RecurrencyWindowStartsAtTime.Value.ToString() : "null");
                Console.WriteLine("RecurrencyWindowEndsAtTime   = {0}",
                                  schedule.RecurrencyWindowEndsAtTime.HasValue ? schedule.RecurrencyWindowEndsAtTime.Value.ToString() : "null");

                Console.WriteLine("PurgeOptions.PurgeType       = {0}", plan.PurgeOptions.PurgeType.ToString());
                switch (plan.PurgeOptions.PurgeType)
                {
                case Models.BackupPlanPurgeTypeEnum.DEFAULT:
                    break;

                case Models.BackupPlanPurgeTypeEnum.CUSTOM:
                    Console.WriteLine("EnabledKeepNumberOfVersions  = {0}", plan.PurgeOptions.EnabledKeepNumberOfVersions);
                    Console.WriteLine("NumberOfVersionsToKeep       = {0}", plan.PurgeOptions.NumberOfVersionsToKeep);
                    break;
                }
                break;
            }

            plan.UpdatedAt = DateTime.UtcNow;

            //try
            //{
            if (IsEditingModel)
            {
                _dao.Update(plan);
            }
            else
            {
                plan.StorageAccount.Hostname = Environment.MachineName;
                _dao.Insert(plan);
            }
            //}
            //catch (Exception ex)
            //{
            //	MessageBox.Show(ex.Message, "Error");
            //}
        }