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; } } }
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"); //} }