Ejemplo n.º 1
0
        /// <summary>
        /// BackupDatabaseToYmlGZ
        /// </summary>
        public string BackupDatabaseToYmlGZ()
        {
            string Base64EncodedBackup;

            TImportExportWebConnector.ExportAllTables(out Base64EncodedBackup);
            return(Base64EncodedBackup);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
 /// <summary>
 /// BackupDatabaseToYmlGZ
 /// </summary>
 public string BackupDatabaseToYmlGZ()
 {
     return(TImportExportWebConnector.ExportAllTables());
 }