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(); } }
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(); }