Example #1
0
        public static List <IStorage> ParseStorageFromConfig(PerformConfig config)
        {
            var tasks = new List <IStorage>();

            if (config != null)
            {
                if (config.Storages != null && config.Storages != null)
                {
                    config.Storages.ForEach(storageConfig =>
                    {
                        if (storageConfig.Enable)
                        {
                            if (storageConfig.Type.ToLower().Trim() == "local")
                            {
                                var task = new LocalStorage(storageConfig.OptionList?.Find(c => c.Name.ToLower() == "path")?.Value);
                                if (storageConfig.OptionList.Find(c => c.Name.ToLower() == "remove_threshold") != null)
                                {
                                    task.RemoveThreshold = Utils.ConvertRemoveThresholdToDateTime(storageConfig.OptionList.Find(c => c.Name.ToLower() == "remove_threshold").Value);
                                }
                                tasks.Add(task);
                            }
                            if (storageConfig.Type.ToLower().Trim() == "s3")
                            {
                                var region          = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "region")?.Value;
                                var accessKeyId     = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "access_key_id")?.Value;
                                var accessKeySecret = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "secret_access_key")?.Value;
                                var bucket          = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "bucket")?.Value;

                                var task = new S3Storage(region, accessKeyId, accessKeySecret, bucket);
                                storageConfig.OptionList.NullSafeSetTo("path", path => task.PathPrefix = path);

                                if (storageConfig.OptionList?.Find(c => c.Name.ToLower() == "remove_threshold") != null)
                                {
                                    task.RemoveThreshold = Utils.ConvertRemoveThresholdToDateTime(storageConfig.OptionList.Find(c => c.Name.ToLower() == "remove_threshold").Value);
                                }
                                tasks.Add(task);
                            }
                            if (storageConfig.Type.ToLower().Trim() == "aliyun_oss")
                            {
                                var endpoint        = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "endpoint")?.Value;
                                var accessKeyId     = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "access_key_id")?.Value;
                                var accessKeySecret = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "secret_access_key")?.Value;
                                var bucket          = storageConfig.OptionList?.Find(c => c.Name.ToLower() == "bucket")?.Value;
                                var task            = new AliyunOssStorage(endpoint, accessKeyId, accessKeySecret, bucket);
                                storageConfig.OptionList.NullSafeSetTo("path", path => task.PathPrefix = path);

                                if (storageConfig.OptionList?.Find(c => c.Name.ToLower() == "remove_threshold") != null)
                                {
                                    task.RemoveThreshold = Utils.ConvertRemoveThresholdToDateTime(storageConfig.OptionList.Find(c => c.Name.ToLower() == "remove_threshold").Value);
                                }
                                tasks.Add(task);
                            }
                        }
                    });
                }
            }
            return(tasks);
        }
Example #2
0
        public static Task <BackupTaskResult[]> RunBackup(PerformConfig cfg)
        {
            Log.Information("Dackup start backup task ");

            var backupTaskList   = PerformConfigHelper.ParseBackupTaskFromConfig(cfg);
            var backupTaskResult = new List <Task <BackupTaskResult> >();

            backupTaskList.ForEach(task =>
            {
                backupTaskResult.Add(task.BackupAsync());
            });
            return(Task.WhenAll(backupTaskResult.ToArray()));
        }
Example #3
0
        public static Task <NotifyResult[]> RunNotify(PerformConfig cfg, Statistics statistics)
        {
            Log.Information("Dackup start notify task ");

            var notifyList = PerformConfigHelper.ParseNotifyFromConfig(cfg);

            var notifyResultList = new List <Task <NotifyResult> >();

            notifyList.ForEach(notify =>
            {
                notifyResultList.Add(notify.NotifyAsync(statistics));
            });

            return(Task.WhenAll(notifyResultList.ToArray()));
        }
Example #4
0
        public static (Task <UploadResult[]>, Task <PurgeResult[]>) RunStorage(PerformConfig cfg)
        {
            Log.Information("Dackup start storage task ");

            var storageList             = PerformConfigHelper.ParseStorageFromConfig(cfg);
            var storageUploadResultList = new List <Task <UploadResult> >();
            var storagePurgeResultList  = new List <Task <PurgeResult> >();

            storageList.ForEach(storage =>
            {
                DackupContext.Current.GenerateFilesList.ForEach(file =>
                {
                    storageUploadResultList.Add(storage.UploadAsync(file));
                });
                storagePurgeResultList.Add(storage.PurgeAsync());
            });

            var storageUploadTasks = Task.WhenAll(storageUploadResultList.ToArray());
            var storagePurgeTasks  = Task.WhenAll(storagePurgeResultList.ToArray());

            return(storageUploadTasks, storagePurgeTasks);
        }
Example #5
0
        public static List <IBackupTask> ParseBackupTaskFromConfig(PerformConfig config)
        {
            var tasks = new List <IBackupTask>();

            if (config != null)
            {
                if (config.Archives != null && config.Archives.Count > 0)
                {
                    config.Archives.ForEach(cfg =>
                    {
                        var name         = cfg.Name;
                        var includesList = cfg.Includes;
                        var excludesList = cfg.Excludes;
                        var task         = new ArchiveBackupTask(name, includesList, excludesList);
                        tasks.Add(task);
                    });
                }
                if (config.Databases != null && config.Databases.Count > 0)
                {
                    config.Databases.ForEach(dbConfig =>
                    {
                        if (dbConfig.Enable)
                        {
                            if (dbConfig.Type.ToLower().Trim() == "postgres")
                            {
                                var task = new PostgresBackupTask();
                                dbConfig.OptionList.NullSafeSetTo("host", s => task.Host                    = s);
                                dbConfig.OptionList.NullSafeSetTo("port", s => task.Port                    = s);
                                dbConfig.OptionList.NullSafeSetTo("database", s => task.Database            = s);
                                dbConfig.OptionList.NullSafeSetTo("username", s => task.UserName            = s);
                                dbConfig.OptionList.NullSafeSetTo("password", s => task.Password            = s);
                                dbConfig.OptionList.NullSafeSetTo("path_to_pg_dump", s => task.PathToPgDump = s);
                                if (dbConfig.AdditionalOptionList != null && dbConfig.AdditionalOptionList.Count > 0)
                                {
                                    dbConfig.AdditionalOptionList.ForEach(c =>
                                    {
                                        task.AddCommandOptions(c.Name, c.Value);
                                    });
                                }
                                tasks.Add(task);
                            }
                            else if (dbConfig.Type.ToLower().Trim() == "mysql")
                            {
                                var task = new MySqlBackupTask();
                                dbConfig.OptionList.NullSafeSetTo("host", s => task.Host         = s);
                                dbConfig.OptionList.NullSafeSetTo("port", s => task.Port         = s);
                                dbConfig.OptionList.NullSafeSetTo("database", s => task.Database = s);
                                dbConfig.OptionList.NullSafeSetTo("username", s => task.UserName = s);
                                dbConfig.OptionList.NullSafeSetTo("password", s => task.Password = s);
                                dbConfig.OptionList.NullSafeSetTo("path_to_mysqldump", s => task.PathToMysqlDump = s);
                                if (dbConfig.AdditionalOptionList != null && dbConfig.AdditionalOptionList.Count > 0)
                                {
                                    dbConfig.AdditionalOptionList.ForEach(c =>
                                    {
                                        task.AddCommandOptions(c.Name, c.Value);
                                    });
                                }
                                tasks.Add(task);
                            }
                            else if (dbConfig.Type.ToLower().Trim() == "mongodb")
                            {
                                var task = new MongoDBBackupTask();
                                dbConfig.OptionList.NullSafeSetTo("host", s => task.Host         = s);
                                dbConfig.OptionList.NullSafeSetTo("port", s => task.Port         = s);
                                dbConfig.OptionList.NullSafeSetTo("database", s => task.Database = s);
                                dbConfig.OptionList.NullSafeSetTo("username", s => task.UserName = s);
                                dbConfig.OptionList.NullSafeSetTo("password", s => task.Password = s);
                                dbConfig.OptionList.NullSafeSetTo("path_to_mongodump", s => task.PathToMongoDump = s);
                                if (dbConfig.AdditionalOptionList != null && dbConfig.AdditionalOptionList.Count > 0)
                                {
                                    dbConfig.AdditionalOptionList.ForEach(c =>
                                    {
                                        task.AddCommandOptions(c.Name, c.Value);
                                    });
                                }
                                tasks.Add(task);
                            }
                            else if (dbConfig.Type.ToLower().Trim() == "mssql")
                            {
                                var task = new MsSqlBackupTask();
                                dbConfig.OptionList.NullSafeSetTo("host", s => task.Host         = s);
                                dbConfig.OptionList.NullSafeSetTo("port", s => task.Port         = s);
                                dbConfig.OptionList.NullSafeSetTo("database", s => task.Database = s);
                                dbConfig.OptionList.NullSafeSetTo("username", s => task.UserName = s);
                                dbConfig.OptionList.NullSafeSetTo("password", s => task.Password = s);
                                dbConfig.OptionList.NullSafeSetTo("path_to_mssqldump", s => task.PathToMssqlDump = s);
                                if (dbConfig.AdditionalOptionList != null && dbConfig.AdditionalOptionList.Count > 0)
                                {
                                    dbConfig.AdditionalOptionList.ForEach(c =>
                                    {
                                        task.AddCommandOptions(c.Name, c.Value);
                                    });
                                }
                                tasks.Add(task);
                            }
                        }
                    });
                }
            }
            return(tasks);
        }
Example #6
0
        public static List <INotify> ParseNotifyFromConfig(PerformConfig config)
        {
            var tasks = new List <INotify>();

            if (config != null)
            {
                if (config.Notifiers != null && config.Notifiers.HttpPostList != null)
                {
                    config.Notifiers.HttpPostList.ForEach(cfg =>
                    {
                        if (cfg.Enable)
                        {
                            var webhook_url    = cfg.OptionList?.Find(c => c.Name == "url")?.Value;
                            var httpPost       = new HttpPostNotify(webhook_url);
                            httpPost.Enable    = cfg.Enable;
                            httpPost.OnFailure = cfg.OnFailure;
                            httpPost.OnSuccess = cfg.OnSuccess;
                            httpPost.OnWarning = cfg.OnWarning;
                            if (cfg.Headers != null)
                            {
                                httpPost.Headers = new NameValueCollection();
                                cfg.Headers.ForEach(header =>
                                {
                                    httpPost.Headers[header.Name] = header.Value;
                                });
                            }
                            var paramsList = cfg.OptionList?.Where(c => c.Name.ToLower() != "url")?.ToList();
                            if (paramsList != null)
                            {
                                httpPost.Params = new NameValueCollection();
                                paramsList.ForEach(param =>
                                {
                                    httpPost.Params[param.Name] = param.Value;
                                });
                            }
                            tasks.Add(httpPost);
                        }
                    });
                }
                if (config.Notifiers != null && config.Notifiers.DingtalkRobotList != null)
                {
                    config.Notifiers.DingtalkRobotList.ForEach(cfg =>
                    {
                        if (cfg.Enable)
                        {
                            var webhook_url         = cfg.OptionList?.Find(c => c.Name == "url")?.Value;
                            var dingtalkRobot       = new DingtalkRobotNotify(webhook_url);
                            dingtalkRobot.AtAll     = cfg.AtAll;
                            dingtalkRobot.Enable    = cfg.Enable;
                            dingtalkRobot.OnFailure = cfg.OnFailure;
                            dingtalkRobot.OnSuccess = cfg.OnSuccess;
                            dingtalkRobot.OnWarning = cfg.OnWarning;
                            if (cfg.AtMobiles != null && cfg.AtMobiles.Count > 0)
                            {
                                dingtalkRobot.AtMobiles = new List <string>();
                                cfg.AtMobiles.ForEach(header =>
                                {
                                    dingtalkRobot.AtMobiles.AddRange(header.Value.Split(';', StringSplitOptions.RemoveEmptyEntries));
                                });
                            }
                            dingtalkRobot.AtMobiles = dingtalkRobot.AtMobiles.Distinct().ToList();
                            tasks.Add(dingtalkRobot);
                        }
                    });
                }
                if (config.Notifiers != null && config.Notifiers.SlackList != null)
                {
                    config.Notifiers.SlackList.ForEach(cfg =>
                    {
                        if (cfg.Enable)
                        {
                            var webhook_url = cfg.OptionList?.Find(c => c.Name == "webhook_url")?.Value;
                            var slack       = new SlackNotify(webhook_url);
                            slack.Enable    = cfg.Enable;
                            slack.OnFailure = cfg.OnFailure;
                            slack.OnSuccess = cfg.OnSuccess;
                            slack.OnWarning = cfg.OnWarning;
                            cfg.OptionList.NullSafeSetTo("channel", channel => slack.Channel          = channel);
                            cfg.OptionList.NullSafeSetTo("icon_emoji", icon_emoji => slack.Icon_emoji = icon_emoji);
                            cfg.OptionList.NullSafeSetTo("username", username => slack.UserName       = username);

                            tasks.Add(slack);
                        }
                    });
                }
                if (config.Notifiers != null && config.Notifiers.EmailList != null)
                {
                    config.Notifiers.EmailList.ForEach(cfg =>
                    {
                        if (cfg.Enable)
                        {
                            var deliveryMethod = cfg.DeliveryMethod;
                            if (!string.IsNullOrWhiteSpace(deliveryMethod) && deliveryMethod.Trim().ToLower() == "smtp")
                            {
                                var from           = cfg.OptionList?.Find(c => c.Name == "from")?.Value;
                                var to             = cfg.OptionList?.Find(c => c.Name == "to")?.Value;
                                var address        = cfg.OptionList?.Find(c => c.Name == "address")?.Value;
                                var domain         = cfg.OptionList?.Find(c => c.Name == "domain")?.Value;
                                var userName       = cfg.OptionList?.Find(c => c.Name == "user_name")?.Value;
                                var password       = cfg.OptionList?.Find(c => c.Name == "password")?.Value;
                                var authentication = cfg.OptionList?.Find(c => c.Name == "authentication")?.Value;
                                var enableStarttls = cfg.OptionList?.Find(c => c.Name == "enable_starttls")?.Value;
                                var cc             = cfg.OptionList?.Find(c => c.Name == "cc")?.Value;
                                var bcc            = cfg.OptionList?.Find(c => c.Name == "bcc")?.Value;

                                var email = new EmailSmtpNotify(from, to, address, domain, userName, password,
                                                                authentication, bool.Parse(enableStarttls), cc, bcc);

                                email.Enable    = cfg.Enable;
                                email.OnFailure = cfg.OnFailure;
                                email.OnSuccess = cfg.OnSuccess;
                                email.OnWarning = cfg.OnWarning;
                                cfg.OptionList.NullSafeSetTo("port", port => email.Port = port);

                                tasks.Add(email);
                            }
                        }
                    });
                }
            }
            return(tasks);
        }