Ejemplo n.º 1
0
        protected void RegisterResultsEventHandlers(Models.Backup backup, TransferResults results)
        {
            BackupedFileRepository daoBackupedFile = new BackupedFileRepository();

            results.DeleteCompleted += (object sender, DeletionArgs e) =>
            {
                Int64?backupedFileId = (Int64?)e.UserData;
                // TODO(jweyrich): We could get rid of the SELECT and perform just the UPDATE.
                Models.BackupedFile backupedFile = daoBackupedFile.Get(backupedFileId.Value);
                backupedFile.TransferStatus = TransferStatus.PURGED;
                backupedFile.UpdatedAt      = DateTime.UtcNow;
                daoBackupedFile.Update(backupedFile);

                //var message = string.Format("Purged {0}", e.FilePath);
                //Info(message);
                //OnUpdate(new BackupOperationEvent { Status = BackupOperationStatus.Updated, Message = message });
            };
            results.Failed += (object sender, TransferFileProgressArgs args) =>
            {
                Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath);
                backupedFile.TransferStatus = TransferStatus.FAILED;
                backupedFile.UpdatedAt      = DateTime.UtcNow;
                daoBackupedFile.Update(backupedFile);

                var message = string.Format("Failed {0} - {1}", args.FilePath, args.Exception != null ? args.Exception.Message : "Unknown reason");
                Warn(message);
                //StatusInfo.Update(BackupStatusLevel.ERROR, message);
                OnUpdate(new BackupOperationEvent {
                    Status = BackupOperationStatus.Updated, Message = message, TransferStatus = TransferStatus.FAILED
                });
            };
            results.Canceled += (object sender, TransferFileProgressArgs args) =>
            {
                Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath);
                backupedFile.TransferStatus = TransferStatus.CANCELED;
                backupedFile.UpdatedAt      = DateTime.UtcNow;
                daoBackupedFile.Update(backupedFile);

                var message = string.Format("Canceled {0} - {1}", args.FilePath, args.Exception != null ? args.Exception.Message : "Unknown reason");
                Warn(message);
                //StatusInfo.Update(BackupStatusLevel.ERROR, message);
                OnUpdate(new BackupOperationEvent {
                    Status = BackupOperationStatus.Updated, Message = message, TransferStatus = TransferStatus.CANCELED
                });
            };
            results.Completed += (object sender, TransferFileProgressArgs args) =>
            {
                Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath);
                backupedFile.TransferStatus = TransferStatus.COMPLETED;
                backupedFile.UpdatedAt      = DateTime.UtcNow;
                daoBackupedFile.Update(backupedFile);

                var message = string.Format("Completed {0}", args.FilePath);
                Info(message);
                OnUpdate(new BackupOperationEvent {
                    Status = BackupOperationStatus.Updated, Message = message, TransferStatus = TransferStatus.COMPLETED
                });

                Models.BackupPlan plan = Backup.BackupPlan;                 //backupedFile.Backup.BackupPlan;

                if (plan.PurgeOptions != null && plan.PurgeOptions.IsTypeCustom && plan.PurgeOptions.EnabledKeepNumberOfVersions)
                {
                    // Purge the oldest versioned files if the count of versions exceeds the maximum specified for the Backup Plan.
                    IList <Models.BackupedFile> previousVersions = daoBackupedFile.GetCompleteByPlanAndPath(plan, args.FilePath);
                    int found = previousVersions.Count;
                    int keep  = plan.PurgeOptions.NumberOfVersionsToKeep;
                    int diff  = found - keep;
                    if (diff > 0)
                    {
                        // Delete the oldest Count-N versions.
                        List <Models.BackupedFile> versionsToPurge = previousVersions.Skip(keep).ToList();
                        foreach (var vp in versionsToPurge)
                        {
                            DeleteVersionedFile(vp.File.Path, new FileVersion {
                                Version = vp.Version
                            }, vp.Id);
                        }
                    }
                }
            };
            results.Started += (object sender, TransferFileProgressArgs args) =>
            {
                Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath);
                backupedFile.TransferStatus = TransferStatus.RUNNING;
                backupedFile.UpdatedAt      = DateTime.UtcNow;
                daoBackupedFile.Update(backupedFile);

                var message = string.Format("Started {0}", args.FilePath);
                Info(message);
                OnUpdate(new BackupOperationEvent {
                    Status = BackupOperationStatus.Updated, Message = message
                });
            };
            results.Progress += (object sender, TransferFileProgressArgs args) =>
            {
#if DEBUG
                var message = string.Format("Progress {0}% {1} ({2}/{3} bytes)",
                                            args.PercentDone, args.FilePath, args.TransferredBytes, args.TotalBytes);
                //Info(message);
#endif
                OnUpdate(new BackupOperationEvent {
                    Status = BackupOperationStatus.Updated, Message = null
                });
            };
        }