示例#1
0
        static void Main(string[] args)
        {
            if (args.Any(x => x.ToLower() == "--config"))
            {
                string configCustomPath = args.GetArgValue("--config");
                if (String.IsNullOrEmpty(configCustomPath))
                {
                    Console.WriteLine("Nieprawidłowa wartość parametru --config");
                    return;
                }
                Configuration.ConfigurationPath = configCustomPath;
            }

            if (args.Any(x => x.ToLower() == "--create-example-config"))
            {
                Configuration.CreateExampleConfigFile();
                if (args.Length > 1)
                {
                    Console.WriteLine("Używając parametru --create-example-config inne parametry są ignorowane.");
                }
                return;
            }

            if (args.Any(x => x.ToLower() == "--authorize"))
            {
                string providerName = args.GetArgValue("--authorize");
                if (String.IsNullOrEmpty(providerName))
                {
                    Console.WriteLine("Brak wartości parametru --authorize.");
                    return;
                }
                var config   = Configuration.Get();
                var provider = config.UploadProviders.FirstOrDefault(x => x.Name == providerName);
                if (provider == null)
                {
                    Console.WriteLine($"Nie znaleziono providera o nazwie {providerName}");
                    return;
                }

                Console.WriteLine("Autoryzacja usług chmurowych zapisu kopii zapasowych...");
                var storage = BackupStorageFactory.GetStorage(provider.ProviderClass);
                var token   = storage.GetToken().GetAwaiter().GetResult();
                Console.WriteLine("Twój token to: " + token);
                provider.Token = token;
                config.Update();
                Console.WriteLine("Token został zapisany w konfiguracji aplikacji.");
                return;
            }

            if (args.Any(x => x.ToLower() == "--test-mail"))
            {
                new SmtpBackupInfo(new BackupInfo[0]).Send();
                return;
            }

            Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

            if (args.Any(x => x.ToLower() == "--backup"))
            {
                Application application = new Application();
                var         app         = Task.Run(application.Run);
                app.Wait();
            }
            else
            {
                WriteHelp();
            }
        }
示例#2
0
        public async Task Run()
        {
            Configuration     config      = Configuration.Get();
            List <BackupInfo> backupInfos = new List <BackupInfo>();
            Stopwatch         sw          = new Stopwatch();
            Stopwatch         lsw         = new Stopwatch();

            sw.Start();
            lsw.Start();

            Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Start aplikacji...");
            foreach (Database db in config.Databases)
            {
                BackupInfo info = new BackupInfo {
                    Database = db.Name
                };
                backupInfos.Add(info);
                StringWriter            dbTraceStringWriter = new StringWriter();
                TextWriterTraceListener dbTrace             = new TextWriterTraceListener(dbTraceStringWriter);
                Trace.Listeners.Add(dbTrace);

                try
                {
                    Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Tworzenie kopii bazy danych {db.Name}...");
                    lsw.Restart();
                    info.Path = new SqlBackup().Backup(db);
                    Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Tworzenie kopii zakończone ({lsw.ElapsedMilliseconds} ms)...");

                    if (db.Zip)
                    {
                        Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Kompresowanie pliku {info.FileName}...");
                        lsw.Restart();
                        info.Path = new ZipFile().Create(info.Path, true, db.ZipPassword);
                        Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Kompresja zakończona ({lsw.ElapsedMilliseconds} ms).");
                    }

                    if (db.Upload)
                    {
                        var provider = config.UploadProviders.FirstOrDefault(x => x.Name == db.UploadProvider);
                        if (provider == null)
                        {
                            throw new Exception($"Provider o nazwie {db.UploadProvider} nieznaleziony");
                        }

                        Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Wysyłanie kopii zapasowej...");
                        lsw.Restart();
                        var storage = BackupStorageFactory.GetStorage(provider.ProviderClass);
                        await storage.Upload(info.Path, provider.Token);

                        Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Wysyłanie kopii zakończone ({lsw.ElapsedMilliseconds} ms).");

                        if (db.DeleteAfterUpload)
                        {
                            File.Delete(info.Path);
                            Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Usunięto lokalną kopię zapasową.");
                        }
                    }

                    info.Status = true;
                }
                catch (Exception ex)
                {
                    info.Status = false;
                    Trace.WriteLine(ex.Message);
                }

                Trace.Listeners.Remove(dbTrace);
                info.Info = dbTraceStringWriter.ToString();
                dbTrace.Dispose();
                dbTraceStringWriter.Dispose();
            }

            Trace.WriteLine($"[{sw.ElapsedMilliseconds} ms] Koniec pracy aplikacji...");
            sw.Stop();
            lsw.Stop();

            new SmtpBackupInfo(backupInfos).Send();
        }