Ejemplo n.º 1
0
 public static IRunnerData CreateTask(Duplicati.Server.Serialization.DuplicatiOperation operation, Duplicati.Server.Serialization.Interface.IBackup backup, IDictionary <string, string> extraOptions = null, string[] filterStrings = null)
 {
     return(new RunnerData()
     {
         Operation = operation,
         Backup = backup,
         ExtraOptions = extraOptions,
         FilterStrings = filterStrings
     });
 }
Ejemplo n.º 2
0
        private static void UpdateMetadata(Duplicati.Server.Serialization.Interface.IBackup backup, object o)
        {
            if (o is Duplicati.Library.Interface.IBasicResults)
            {
                var r = (Duplicati.Library.Interface.IBasicResults)o;
                backup.Metadata["LastDuration"] = r.Duration.ToString();
                backup.Metadata["LastStarted"]  = Library.Utility.Utility.SerializeDateTime(((Duplicati.Library.Interface.IBasicResults)o).BeginTime.ToUniversalTime());
                backup.Metadata["LastFinished"] = Library.Utility.Utility.SerializeDateTime(((Duplicati.Library.Interface.IBasicResults)o).EndTime.ToUniversalTime());
            }

            if (o is Duplicati.Library.Interface.IParsedBackendStatistics)
            {
                var r = (Duplicati.Library.Interface.IParsedBackendStatistics)o;
                UpdateMetadata(backup, r);
            }

            if (o is Duplicati.Library.Interface.IBackendStatsticsReporter)
            {
                var r = (Duplicati.Library.Interface.IBackendStatsticsReporter)o;
                if (r.BackendStatistics is Duplicati.Library.Interface.IParsedBackendStatistics)
                {
                    UpdateMetadata(backup, (Duplicati.Library.Interface.IParsedBackendStatistics)r.BackendStatistics);
                }
            }

            if (o is Duplicati.Library.Interface.IBackupResults)
            {
                var r = (Duplicati.Library.Interface.IBackupResults)o;
                backup.Metadata["SourceFilesSize"]    = r.SizeOfExaminedFiles.ToString();
                backup.Metadata["SourceFilesCount"]   = r.ExaminedFiles.ToString();
                backup.Metadata["SourceSizeString"]   = Duplicati.Library.Utility.Utility.FormatSizeString(r.SizeOfExaminedFiles);
                backup.Metadata["LastBackupStarted"]  = Library.Utility.Utility.SerializeDateTime(((Duplicati.Library.Interface.IBasicResults)o).BeginTime.ToUniversalTime());
                backup.Metadata["LastBackupFinished"] = Library.Utility.Utility.SerializeDateTime(((Duplicati.Library.Interface.IBasicResults)o).EndTime.ToUniversalTime());

                if (r.FilesWithError > 0 || r.Warnings.Any())
                {
                    Program.DataConnection.RegisterNotification(
                        NotificationType.Error,
                        backup.IsTemporary ?
                        "Warning" : string.Format("Warning while running {0}", backup.Name),
                        r.FilesWithError > 0 ?
                        string.Format("Errors affected {0} file(s) ", r.FilesWithError) :
                        string.Format("Got {0} warning(s) ", r.Warnings.Count())
                        ,
                        null,
                        backup.ID,
                        "backup:show-log",
                        (n, a) => {
                        var existing = (a.Where(x => x.BackupID == backup.ID)).FirstOrDefault();
                        if (existing == null)
                        {
                            return(n);
                        }

                        if (existing.Type == NotificationType.Error)
                        {
                            return(existing);
                        }

                        return(n);
                    }
                        );
                }
            }

            if (!backup.IsTemporary)
            {
                Program.DataConnection.SetMetadata(backup.Metadata, long.Parse(backup.ID), null);
            }

            System.Threading.Interlocked.Increment(ref Program.LastDataUpdateID);
            Program.StatusEventNotifyer.SignalNewEvent();
        }
Ejemplo n.º 3
0
 private static bool TestIfOptionApplies(Duplicati.Server.Serialization.Interface.IBackup backup, DuplicatiOperation mode, string filter)
 {
     //TODO: Implement to avoid warnings
     return(true);
 }
Ejemplo n.º 4
0
        private static void UpdateMetadata(Duplicati.Server.Serialization.Interface.IBackup backup, Duplicati.Library.Interface.IBasicResults result)
        {
            if (result is Duplicati.Library.Interface.IRestoreResults)
            {
                var r = (Duplicati.Library.Interface.IRestoreResults)result;
                backup.Metadata["LastRestoreDuration"] = r.Duration.ToString();
                backup.Metadata["LastRestoreStarted"]  = Library.Utility.Utility.SerializeDateTime(result.BeginTime.ToUniversalTime());
                backup.Metadata["LastRestoreFinished"] = Library.Utility.Utility.SerializeDateTime(result.EndTime.ToUniversalTime());
            }

            if (result is Duplicati.Library.Interface.IParsedBackendStatistics)
            {
                var r = (Duplicati.Library.Interface.IParsedBackendStatistics)result;
                UpdateMetadata(backup, r);
            }

            if (result is Duplicati.Library.Interface.IBackendStatsticsReporter)
            {
                var r = (Duplicati.Library.Interface.IBackendStatsticsReporter)result;
                if (r.BackendStatistics is Duplicati.Library.Interface.IParsedBackendStatistics)
                {
                    UpdateMetadata(backup, (Duplicati.Library.Interface.IParsedBackendStatistics)r.BackendStatistics);
                }
            }

            if (result is Duplicati.Library.Interface.ICompactResults)
            {
                UpdateLastCompactMetadata(backup, (Duplicati.Library.Interface.ICompactResults)result);
            }

            if (result is Duplicati.Library.Interface.IBackupResults)
            {
                var r = (Duplicati.Library.Interface.IBackupResults)result;
                backup.Metadata["SourceFilesSize"]    = r.SizeOfExaminedFiles.ToString();
                backup.Metadata["SourceFilesCount"]   = r.ExaminedFiles.ToString();
                backup.Metadata["SourceSizeString"]   = Duplicati.Library.Utility.Utility.FormatSizeString(r.SizeOfExaminedFiles);
                backup.Metadata["LastBackupStarted"]  = Library.Utility.Utility.SerializeDateTime(result.BeginTime.ToUniversalTime());
                backup.Metadata["LastBackupFinished"] = Library.Utility.Utility.SerializeDateTime(result.EndTime.ToUniversalTime());
                backup.Metadata["LastBackupDuration"] = r.Duration.ToString();

                if (r.CompactResults != null)
                {
                    UpdateLastCompactMetadata(backup, r.CompactResults);
                }

                if (r.FilesWithError > 0 || r.Warnings.Any() || r.Errors.Any())
                {
                    Program.DataConnection.RegisterNotification(
                        r.FilesWithError == 0 && !r.Errors.Any() ? NotificationType.Warning : NotificationType.Error,
                        backup.IsTemporary ?
                        "Warning" : string.Format("Warning while running {0}", backup.Name),
                        r.FilesWithError > 0 ?
                        string.Format("Errors affected {0} file(s) ", r.FilesWithError) :
                        (r.Errors.Any() ?
                         string.Format("Got {0} error(s)", r.Errors.Count()) :
                         string.Format("Got {0} warning(s)", r.Warnings.Count())
                        )
                        ,
                        null,
                        backup.ID,
                        "backup:show-log",
                        null,
                        null,
                        null,
                        (n, a) =>
                    {
                        var existing = a.FirstOrDefault(x => x.BackupID == backup.ID);
                        if (existing == null)
                        {
                            return(n);
                        }

                        if (existing.Type == NotificationType.Error)
                        {
                            return(existing);
                        }

                        return(n);
                    }
                        );
                }
            }
            else if (result.ParsedResult != Library.Interface.ParsedResultType.Success)
            {
                var type = result.ParsedResult == Library.Interface.ParsedResultType.Warning
                            ? NotificationType.Warning
                            : NotificationType.Error;

                var title = result.ParsedResult == Library.Interface.ParsedResultType.Warning
                                ? (backup.IsTemporary ?
                                   "Warning" : string.Format("Warning while running {0}", backup.Name))
                            : (backup.IsTemporary ?
                               "Error" : string.Format("Error while running {0}", backup.Name));

                var message = result.ParsedResult == Library.Interface.ParsedResultType.Warning
                                    ? string.Format("Got {0} warning(s)", result.Warnings.Count())
                                    : string.Format("Got {0} error(s)", result.Errors.Count());

                Program.DataConnection.RegisterNotification(
                    type,
                    title,
                    message,
                    null,
                    backup.ID,
                    "backup:show-log",
                    null,
                    null,
                    "backup:show-log",
                    (n, a) => n
                    );
            }

            if (!backup.IsTemporary)
            {
                Program.DataConnection.SetMetadata(backup.Metadata, long.Parse(backup.ID), null);
            }

            System.Threading.Interlocked.Increment(ref Program.LastDataUpdateID);
            Program.StatusEventNotifyer.SignalNewEvent();
        }