Esempio n. 1
0
        /// <summary>
        /// Success:
        /// message=Duplicati%20Backup%20report%20for%20test%0D%0A%0D%0ADeletedFiles%3A%200%0D%0ADeletedFolders%3A%200%0D%0AModifiedFiles%3A%200%0D%0AExaminedFiles%3A%206%0D%0AOpenedFiles%3A%200%0D%0AAddedFiles%3A%200%0D%0ASizeOfModifiedFiles%3A%200%0D%0ASizeOfAddedFiles%3A%200%0D%0ASizeOfExaminedFiles%3A%2013919%0D%0ASizeOfOpenedFiles%3A%200%0D%0ANotProcessedFiles%3A%200%0D%0AAddedFolders%3A%200%0D%0ATooLargeFiles%3A%200%0D%0AFilesWithError%3A%200%0D%0AModifiedFolders%3A%200%0D%0AModifiedSymlinks%3A%200%0D%0AAddedSymlinks%3A%200%0D%0ADeletedSymlinks%3A%200%0D%0APartialBackup%3A%20False%0D%0ADryrun%3A%20False%0D%0AMainOperation%3A%20Backup%0D%0AParsedResult%3A%20Success%0D%0AVerboseOutput%3A%20False%0D%0AVerboseErrors%3A%20False%0D%0AEndTime%3A%201%2F8%2F2018%2010%3A09%3A16%20PM%0D%0ABeginTime%3A%201%2F8%2F2018%2010%3A09%3A16%20PM%0D%0ADuration%3A%2000%3A00%3A00.2339903%0D%0AMessages%3A%20%5B%0D%0A%20%20%20%20No%20remote%20filesets%20were%20deleted%2C%0D%0A%20%20%20%20removing%20file%20listed%20as%20Temporary%3A%20duplicati-b01323d5f20f448ef98247929ca38a32f.dblock.zip.aes%2C%0D%0A%20%20%20%20removing%20file%20listed%20as%20Temporary%3A%20duplicati-if782675db40345d4a4da546c19c08ddd.dindex.zip.aes%0D%0A%5D%0D%0AWarnings%3A%20%5B%5D%0D%0AErrors%3A%20%5B%5D
        ///
        /// Error:
        /// message=Duplicati%20Backup%20report%20for%20test%0D%0A%0D%0AFailed%3A%20The%20AWS%20Access%20Key%20Id%20you%20provided%20does%20not%20exist%20in%20our%20records.%0D%0ADetails%3A%20Amazon.S3.AmazonS3Exception%3A%20The%20AWS%20Access%20Key%20Id%20you%20provided%20does%20not%20exist%20in%20our%20records.%20---%3E%20Amazon.Runtime.Internal.HttpErrorResponseException%3A%20The%20remote%20server%20returned%20an%20error%3A%20%28403%29%20Forbidden.%20---%3E%20System.Net.WebException%3A%20The%20remote%20server%20returned%20an%20error%3A%20%28403%29%20Forbidden.%0D%0A%20%20%20at%20System.Net.HttpWebRequest.GetResponse%28%29%0D%0A%20%20%20at%20Amazon.Runtime.Internal.HttpRequest.GetResponse%28%29%0D%0A%20%20%20---%20End%20of%20inner%20exception%20stack%20trace%20---%0D%0A%20%20%20at%20Amazon.Runtime.Internal.HttpRequest.GetResponse%28%29%0D%0A%20%20%20at%20Amazon.Runtime.Internal.HttpHandler%601.InvokeSync%28IExecutionContext%20executionContext%29%0D%0A%20%20%20at%20Amazon.Runtime.Internal.RedirectHandler.InvokeSync%28IExecutionContext%20executionContext%29%0D%0A%20%20%20at%20Amazon.Runtime.Internal.Unmarshaller.InvokeSync%28IExecutionContext%20executionContext%29%0D%0A%20%20%20at%20Amazon.S3.Internal.AmazonS3ResponseHandler.InvokeSync%28IExecutionContext%20executionContext%29%0D%0A%20%20%20at%20Amazon.Runtime.Internal.ErrorHandler.InvokeSync%28IExecutionContext%20executionContext%29%0D%0A%20%20%20---%20End%20of%20inner%20exception%20stack%20trace%20---%0D%0A%20%20%20at%20Duplicati.Library.Main.BackendManager.List%28%29%0D%0A%20%20%20at%20Duplicati.Library.Main.Operation.FilelistProcessor.RemoteListAnalysis%28BackendManager%20backend%2C%20Options%20options%2C%20LocalDatabase%20database%2C%20IBackendWriter%20log%2C%20String%20protectedfile%29%0D%0A%20%20%20at%20Duplicati.Library.Main.Operation.FilelistProcessor.VerifyRemoteList%28BackendManager%20backend%2C%20Options%20options%2C%20LocalDatabase%20database%2C%20IBackendWriter%20log%2C%20String%20protectedfile%29%0D%0A%20%20%20at%20Duplicati.Library.Main.Operation.BackupHandler.PreBackupVerify%28BackendManager%20backend%2C%20String%20protectedfile%29%0D%0A%20%20%20at%20Duplicati.Library.Main.Operation.BackupHandler.Run%28String%5B%5D%20sources%2C%20IFilter%20filter%29%0D%0A%20%20%20at%20Duplicati.Library.Main.Controller.%3C%3Ec__DisplayClass16_0.%3CBackup%3Eb__0%28BackupResults%20result%29%0D%0A%20%20%20at%20Duplicati.Library.Main.Controller.RunAction%5BT%5D%28T%20result%2C%20String%5B%5D%26%20paths%2C%20IFilter%26%20filter%2C%20Action%601%20method%29%0D%0A
        /// </summary>
        /// <returns></returns>
        public async Task Post(int id, [FromBody] DuplicatiReportRequest message)
        {
            BackupReport report = null;

            try
            {
                //save to disk
                using (DuplicatiContext db = new DuplicatiContext())
                {
                    var instance = db.Instances.FirstOrDefault(c => c.Id == id);
                    report            = ParseDuplicatiReportMessage(message.Message, instance);
                    report.InstanceId = id;
                    db.BackupReports.Add(report);
                    await db.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                if (report == null)
                {
                    report = new BackupReport();
                }
                File.WriteAllText(HttpContext.Current.Server.MapPath("/app_data/report_errors.txt"), JsonConvert.SerializeObject(ex) + JsonConvert.SerializeObject(report));
                throw ex;
            }
        }
Esempio n. 2
0
        protected BackupReport ProcessSuccessMessage(string message, Instance instance)
        {
            var lines = message.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();

            lines.RemoveRange(0, 2);

            var    report = new BackupReport();
            bool   insideSquareBrackets = false;
            string currentKey           = "";

            foreach (var line in lines)
            {
                string currentValue;
                if (insideSquareBrackets)
                {
                    currentValue = line;
                }
                else
                {
                    var index = line.IndexOf(':');
                    currentKey   = line.Substring(0, index).Trim();
                    currentValue = line.Substring(index + 1).Trim();
                }

                if (currentValue == "[")
                {
                    insideSquareBrackets = true;
                }
                else if (currentValue == "]")
                {
                    insideSquareBrackets = false;
                }
                else if (currentValue != "[]")
                {
                    //its a key value (key: value)
                    SetValue(report, currentKey, currentValue, insideSquareBrackets, instance);
                }
            }
            return(report);
        }
Esempio n. 3
0
        protected void SetValue(BackupReport report, string key, string value, bool append, Instance instance)
        {
            switch (key)
            {
            case "DeletedFiles":
                report.DeletedFiles = int.Parse(value);
                break;

            case "ExaminedFiles":
                report.ExaminedFiles = int.Parse(value);
                break;

            case "ModifiedFiles":
                report.ExaminedFiles = int.Parse(value);
                break;

            case "DeletedFolders":
                report.DeletedFolders = int.Parse(value);
                break;

            case "OpenedFiles":
                report.OpenedFiles = int.Parse(value);
                break;

            case "AddedFiles":
                report.AddedFiles = int.Parse(value);
                break;

            case "SizeOfModifiedFiles":
                report.SizeOfModifiedFiles = int.Parse(value);
                break;

            case "SizeOfAddedFiles":
                report.SizeOfAddedFiles = int.Parse(value);
                break;

            case "SizeOfExaminedFiles":
                report.SizeOfExaminedFiles = long.Parse(value);
                break;

            case "SizeOfOpenedFiles":
                report.SizeOfOpenedFiles = int.Parse(value);
                break;

            case "NotProcessedFiles":
                report.NotProcessedFiles = int.Parse(value);
                break;

            case "AddedFolders":
                report.AddedFolders = int.Parse(value);
                break;

            case "TooLargeFiles":
                report.TooLargeFiles = int.Parse(value);
                break;

            case "FilesWithError":
                report.FilesWithError = int.Parse(value);
                break;

            case "ModifiedFolders":
                report.ModifiedFolders = int.Parse(value);
                break;

            case "ModifiedSymlinks":
                report.ModifiedSymlinks = int.Parse(value);
                break;

            case "AddedSymlinks":
                report.AddedSymlinks = int.Parse(value);
                break;

            case "PartialBackup":
                report.PartialBackup = value.ToLower() == "true";
                break;

            case "Dryrun":
                report.DryRun = value.ToLower() == "true";
                break;

            case "ParsedResult":
                report.Success = value.ToLower() == "success";
                break;

            case "VerboseOutput":
                report.VerboseOutput = value.ToLower() == "true";
                break;

            case "VerboseErrors":
                report.VerboseErrors = value.ToLower() == "true";
                break;

            case "EndTime":
                //report.EndDate = DateTime.Parse(value);
                report.EndDate = DateTime.ParseExact(value, !string.IsNullOrEmpty(instance.DateTimeFormat) ? instance.DateTimeFormat : "M/d/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
                break;

            case "BeginTime":
                //report.BeginDate = DateTime.Parse(value);
                report.BeginDate = DateTime.ParseExact(value, !string.IsNullOrEmpty(instance.DateTimeFormat) ? instance.DateTimeFormat : "M/d/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
                break;

            case "Duration":
                report.Duration = TimeSpan.Parse(value);
                break;

            case "Messages":
                report.Message += !string.IsNullOrEmpty(report.Message) ? Environment.NewLine + value : value;
                break;

            case "Warnings":
                report.Warnings = value;
                break;

            case "Errors":
                report.Errors = value;
                break;
            }
        }