/// <summary> /// BackupDatabaseToYmlGZ /// </summary> public string BackupDatabaseToYmlGZ() { string Base64EncodedBackup; TImportExportWebConnector.ExportAllTables(out Base64EncodedBackup); return(Base64EncodedBackup); }
private static bool DumpYmlGz(string YmlFile) { string YmlGZData = TImportExportWebConnector.ExportAllTables(); YmlFile = Path.GetFullPath(YmlFile); FileStream fs = new FileStream(YmlFile, FileMode.Create); byte[] buffer = Convert.FromBase64String(YmlGZData); fs.Write(buffer, 0, buffer.Length); fs.Close(); TLogging.Log("backup has been written to " + YmlFile); return(true); }
private void RunMenu() { bool ReadLineLoopEnd = false; bool EntryParsedOK = false; System.Int16 ClientID = 0; System.Int16 ClientTaskPriority = 1; do { string ServerCommand = (Console.ReadLine()); if (ServerCommand.Length > 0) { ServerCommand = ServerCommand.Substring(0, 1); switch (Convert.ToChar(ServerCommand)) { case 'm': case 'M': Console.WriteLine(Environment.NewLine + "-> Available commands <-"); Console.WriteLine(" c: list connected Clients / C: list disconnected Clients"); Console.WriteLine(" d: disconnect a certain Client"); if (TLogging.DebugLevel > 0) { Console.WriteLine(" l: load AppDomain for a fake Client (for debugging purposes only!)"); } Console.WriteLine(" p: perform timed server processing manually now"); Console.WriteLine(" q: queue a Client Task for a certain Client"); Console.WriteLine(" s: Server Status"); if (TLogging.DebugLevel > 0) { Console.WriteLine(" y: show Server memory"); Console.WriteLine(" g: perform Server garbage collection (for debugging purposes only!)"); } Console.WriteLine(" e: export the database to yml.gz"); Console.WriteLine(" i: import a yml.gz, which will overwrite the database"); #if DEBUG Console.WriteLine(" r: Mark all Cached Tables for Refreshing"); #endif Console.WriteLine(" o: controlled Server shutdown (gets all connected clients to disconnect)"); Console.WriteLine(" u: unconditional Server shutdown (forces 'hard' disconnection of all Clients!)"); WriteServerPrompt(); // list connected Clients break; case 'c': Console.WriteLine(Environment.NewLine + "-> Connected Clients <-"); Console.WriteLine(TheServerManager.FormatClientList(false)); WriteServerPrompt(); // list disconnected Clients break; case 'C': Console.WriteLine(Environment.NewLine + "-> Disconnected Clients <-"); Console.WriteLine(TheServerManager.FormatClientList(true)); WriteServerPrompt(); // disconnect a certain Client break; case 'd': case 'D': Console.WriteLine(Environment.NewLine + "-> Disconnect a certain Client <-"); if (TheServerManager.ClientList.Count > 0) { Console.WriteLine(TheServerManager.FormatClientList(false)); Console.Write(" Enter ClientID: "); string ConsoleInput = Console.ReadLine(); try { ClientID = System.Int16.Parse(ConsoleInput); String CantDisconnectReason; if (TheServerManager.DisconnectClient(ClientID, out CantDisconnectReason)) { TLogging.Log("Client #" + ClientID.ToString() + ": disconnection will take place shortly."); } else { TLogging.Log( "Client #" + ClientID.ToString() + " could not be disconnected on admin request. Reason: " + CantDisconnectReason); } } catch (System.FormatException) { Console.WriteLine(" Entered ClientID is not numeric!"); } catch (Exception exp) { TLogging.Log( Environment.NewLine + "Exception occured while trying to disconnect a Client on admin request:" + Environment.NewLine + exp.ToString()); } } else { Console.WriteLine(" * no Clients connected *"); } WriteServerPrompt(); // load AppDomain for a fake Client (for debugging purposes only!) break; case 'e': case 'E': string YmlGZData = TImportExportWebConnector.ExportAllTables(); Console.Write(" Please enter filename of yml.gz file: "); string backupFile = Path.GetFullPath(Console.ReadLine()); if (!backupFile.EndsWith(".yml.gz")) { Console.WriteLine("filename has to end with .yml.gz. Please try again"); } else { FileStream fs = new FileStream(backupFile, FileMode.Create); byte[] buffer = Convert.FromBase64String(YmlGZData); fs.Write(buffer, 0, buffer.Length); fs.Close(); TLogging.Log("backup has been written to " + backupFile); } WriteServerPrompt(); break; case 'i': case 'I': Console.WriteLine(Environment.NewLine + "-> DELETING YOUR DATABASE <-"); Console.Write(" Enter YES to import the new database (anything else to leave command): "); if (Console.ReadLine() == "YES") { Console.Write(" Please enter filename of yml.gz file: "); string restoreFile = Path.GetFullPath(Console.ReadLine()); if (!File.Exists(restoreFile) || !restoreFile.EndsWith(".yml.gz")) { Console.WriteLine("invalid filename, please try again"); } else { FileStream fsRead = new FileStream(restoreFile, FileMode.Open); byte[] bufferRead = new byte[fsRead.Length]; fsRead.Read(bufferRead, 0, bufferRead.Length); fsRead.Close(); YmlGZData = Convert.ToBase64String(bufferRead); if (TImportExportWebConnector.ResetDatabase(YmlGZData)) { TLogging.Log("backup has been restored from " + restoreFile); } else { TLogging.Log("there have been problems with the restore"); } } WriteServerPrompt(); } else { Console.WriteLine(" Reset of database cancelled!"); WriteServerPrompt(); } break; case 'r': case 'R': Console.WriteLine(Environment.NewLine + "-> Marking all Cached Tables for Refreshing... <-"); TheServerManager.RefreshAllCachedTables(); WriteServerPrompt(); break; case 'p': case 'P': string resp = ""; Console.WriteLine(" Server Timed Processing Status: " + "runs daily at " + TheServerManager.TimedProcessingDailyStartTime24Hrs + "."); Console.WriteLine(" Partner Reminders: " + (TheServerManager.TimedProcessingJobEnabled("TProcessPartnerReminders") ? "On" : "Off")); Console.WriteLine(" Automatic Intranet Export: " + (TheServerManager.TimedProcessingJobEnabled("TProcessAutomatedIntranetExport") ? "On" : "Off")); Console.WriteLine(" Data Checks: " + (TheServerManager.TimedProcessingJobEnabled("TProcessDataChecks") ? "On" : "Off")); Console.WriteLine(" SMTP Server used for sending e-mails: " + TheServerManager.SMTPServer); if (TheServerManager.TimedProcessingJobEnabled("TProcessPartnerReminders")) { Console.WriteLine(""); Console.WriteLine("Do you want to run Reminder Processing now?"); Console.Write("Type YES to continue, anything else to skip:"); resp = Console.ReadLine(); if (resp == "YES") { TheServerManager.PerformTimedProcessingNow("TProcessPartnerReminders"); } } if (TheServerManager.TimedProcessingJobEnabled("TProcessAutomatedIntranetExport")) { Console.WriteLine(""); Console.WriteLine("Do you want to run Intranet Export Processing now?"); Console.Write("Type YES to continue, anything else to skip:"); resp = Console.ReadLine(); if (resp == "YES") { TheServerManager.PerformTimedProcessingNow("TProcessAutomatedIntranetExport"); } } if (TheServerManager.TimedProcessingJobEnabled("TProcessDataChecks")) { Console.WriteLine(""); Console.WriteLine("Do you want to run Data Checks Processing now?"); Console.Write("Type YES to continue, anything else to skip:"); resp = Console.ReadLine(); if (resp == "YES") { TheServerManager.PerformTimedProcessingNow("TProcessDataChecks"); } } WriteServerPrompt(); break; case 's': case 'S': Console.WriteLine(Environment.NewLine + "-> Server Status <-"); Console.WriteLine(); DisplayPetraServerInformation(TheServerManager); WriteServerPrompt(); break; case 'q': case 'Q': Console.WriteLine(Environment.NewLine + "-> Queue a Client Task for a certain Client <-"); if (TheServerManager.ClientList.Count > 0) { Console.WriteLine(TheServerManager.FormatClientList(false)); ReadClientID: Console.Write(" Enter ClientID: "); string ConsoleInput = Console.ReadLine(); try { ClientID = System.Int16.Parse(ConsoleInput); EntryParsedOK = true; } catch (System.FormatException) { Console.WriteLine(" Entered ClientID is not numeric!"); EntryParsedOK = false; } if (!EntryParsedOK) { goto ReadClientID; } Console.Write(" Enter Client Task Group: "); string ClientTaskGroup = Console.ReadLine(); Console.Write(" Enter Client Task Code: "); string ClientTaskCode = Console.ReadLine(); ReadClientTaskPriority: Console.Write(" Enter Client Task Priority: "); ConsoleInput = Console.ReadLine(); try { ClientTaskPriority = System.Int16.Parse(ConsoleInput); EntryParsedOK = true; } catch (System.FormatException) { Console.WriteLine(" Entered Client Task Priority is not numeric!"); EntryParsedOK = false; } if (!EntryParsedOK) { goto ReadClientTaskPriority; } try { if (TheServerManager.QueueClientTask(ClientID, ClientTaskGroup, ClientTaskCode, ClientTaskPriority)) { TLogging.Log("Client Task queued for Client #" + ClientID.ToString() + " on admin request."); } else { TLogging.Log( "Client Task for Client #" + ClientID.ToString() + " could not be queued on admin request."); } } catch (Exception exp) { TLogging.Log( Environment.NewLine + "Exception occured while queueing a Client Task on admin request:" + Environment.NewLine + exp.ToString()); } } else { Console.WriteLine(" * no Clients connected *"); } WriteServerPrompt(); // show Server memory break; case 'y': case 'Y': Console.WriteLine("Server memory: " + TheServerManager.ServerInfoMemory.ToString()); WriteServerPrompt(); // perform Server garbage collection break; case 'g': case 'G': Console.WriteLine("GarbageCollection performed. Server memory: " + TheServerManager.PerformGC().ToString()); WriteServerPrompt(); // unconditional Server shutdown break; case 'o': case 'O': Console.WriteLine(Environment.NewLine + "-> CONTROLLED SHUTDOWN (gets all connected clients to disconnect) <-"); Console.Write(" Enter YES to perform controlled shutdown (anything else to leave command): "); if (Console.ReadLine() == "YES") { if (!TheServerManager.StopServerControlled(false)) { Console.WriteLine(" Shutdown cancelled!"); WriteServerPrompt(); } } else { Console.WriteLine(" Shutdown cancelled!"); WriteServerPrompt(); } break; case 'u': case 'U': Console.WriteLine(Environment.NewLine + "-> UNCONDITIONAL SHUTDOWN (force disconnection of all Clients) <-"); Console.Write(" Enter YES to perform UNCONDITIONAL shutdown (anything else to leave command): "); if (Console.ReadLine() == "YES") { TheServerManager.StopServer(); ReadLineLoopEnd = true; } else { Console.WriteLine(" Shutdown cancelled!"); WriteServerPrompt(); } break; default: Console.WriteLine( Environment.NewLine + "-> Unrecognised command '" + ServerCommand + "' <- (Press 'm' for menu)"); WriteServerPrompt(); break; } // case Convert.ToChar( ServerCommand ) } else { WriteServerPrompt(); } } while (!(ReadLineLoopEnd == true)); }
/// <summary> /// BackupDatabaseToYmlGZ /// </summary> public string BackupDatabaseToYmlGZ() { return(TImportExportWebConnector.ExportAllTables()); }