From bfecd6ad14a8991e30292fe4a837242e1be341cf Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 9 Mar 2020 14:08:17 -0500 Subject: [PATCH] Add query-serv table dump option, add option to dump directly to console, add initializers for dump settings --- common/database/database_dump_service.cpp | 77 ++++++++++++++++++++--- common/database/database_dump_service.h | 23 ++++--- common/database_schema.h | 27 +++++++- world/world_server_command_handler.cpp | 4 ++ 4 files changed, 113 insertions(+), 18 deletions(-) diff --git a/common/database/database_dump_service.cpp b/common/database/database_dump_service.cpp index 4d0273bf6..f7a339c84 100644 --- a/common/database/database_dump_service.cpp +++ b/common/database/database_dump_service.cpp @@ -29,10 +29,13 @@ #include "../file_util.h" #include + #if _WIN32 #include #else + #include + #endif #define DATABASE_DUMP_PATH "backups/" @@ -159,6 +162,20 @@ std::string DatabaseDumpService::GetLoginTableList() return trim(tables_list); } +/** + * @return + */ +std::string DatabaseDumpService::GetQueryServTables() +{ + std::string tables_list; + std::vector tables = DatabaseSchema::GetQueryServerTables(); + for (const auto &table : tables) { + tables_list += table + " "; + } + + return trim(tables_list); +} + /** * @return */ @@ -238,6 +255,10 @@ void DatabaseDumpService::Dump() return; } + if (IsDumpOutputToConsole()) { + LogSys.SilenceConsoleLogging(); + } + LogInfo("MySQL installed [{}]", GetMySQLVersion()); SetDumpFileName(EQEmuConfig::get()->DatabaseDB + '-' + GetDumpDate()); @@ -266,43 +287,59 @@ void DatabaseDumpService::Dump() if (!IsDumpAllTables()) { if (IsDumpPlayerTables()) { - tables_to_dump += GetPlayerTablesList(); + tables_to_dump += GetPlayerTablesList() + " "; dump_descriptor += "-player"; } if (IsDumpSystemTables()) { - tables_to_dump += GetSystemTablesList(); + tables_to_dump += GetSystemTablesList() + " "; dump_descriptor += "-system"; } if (IsDumpContentTables()) { - tables_to_dump += GetContentTablesList(); + tables_to_dump += GetContentTablesList() + " "; dump_descriptor += "-content"; } if (IsDumpLoginServerTables()) { - tables_to_dump += GetLoginTableList(); + tables_to_dump += GetLoginTableList() + " "; dump_descriptor += "-login"; } + + if (IsDumpQueryServerTables()) { + tables_to_dump += GetQueryServTables(); + dump_descriptor += "-queryserv"; + } } if (!dump_descriptor.empty()) { SetDumpFileName(GetDumpFileName() + dump_descriptor); } + /** + * If we are dumping to stdout then we don't generate a file + */ + std::string pipe_file; + if (!IsDumpOutputToConsole()) { + pipe_file = fmt::format(" > {}.sql", GetDumpFileNameWithPath()); + } + std::string execute_command = fmt::format( - "{} {} {} > {}.sql", + "{} {} {} {}", GetBaseMySQLDumpCommand(), options, tables_to_dump, - GetDumpFileNameWithPath() + pipe_file ); - if (!FileUtil::exists(GetSetDumpPath())) { + if (!FileUtil::exists(GetSetDumpPath()) && !IsDumpOutputToConsole()) { FileUtil::mkdir(GetSetDumpPath()); } - execute(execute_command, false); + std::string execution_result = execute(execute_command, IsDumpOutputToConsole()); + if (!execution_result.empty()) { + std::cout << execution_result; + } if (!tables_to_dump.empty()) { LogInfo("Dumping Tables [{}]", tables_to_dump); @@ -310,7 +347,7 @@ void DatabaseDumpService::Dump() LogInfo("Database dump created at [{}.sql]", GetDumpFileNameWithPath()); - if (IsDumpWithCompression()) { + if (IsDumpWithCompression() && !IsDumpOutputToConsole()) { if (HasCompressionBinary()) { LogInfo("Compression requested... Compressing dump [{}.sql]", GetDumpFileNameWithPath()); @@ -331,8 +368,10 @@ void DatabaseDumpService::Dump() } } +// LogDebug("[{}] dump-to-console", IsDumpOutputToConsole()); // LogDebug("[{}] dump-path", GetSetDumpPath()); // LogDebug("[{}] compression", (IsDumpWithCompression() ? "true" : "false")); +// LogDebug("[{}] query-serv", (IsDumpQueryServerTables() ? "true" : "false")); // LogDebug("[{}] has-compression-binary", (HasCompressionBinary() ? "true" : "false")); // LogDebug("[{}] content", (IsDumpContentTables() ? "true" : "false")); // LogDebug("[{}] no-data", (IsDumpWithNoData() ? "true" : "false")); @@ -439,3 +478,23 @@ const std::string &DatabaseDumpService::GetDumpFileName() const { return dump_file_name; } + +bool DatabaseDumpService::IsDumpQueryServerTables() const +{ + return dump_query_server_tables; +} + +void DatabaseDumpService::SetDumpQueryServerTables(bool dump_query_server_tables) +{ + DatabaseDumpService::dump_query_server_tables = dump_query_server_tables; +} + +bool DatabaseDumpService::IsDumpOutputToConsole() const +{ + return dump_output_to_console; +} + +void DatabaseDumpService::SetDumpOutputToConsole(bool dump_output_to_console) +{ + DatabaseDumpService::dump_output_to_console = dump_output_to_console; +} \ No newline at end of file diff --git a/common/database/database_dump_service.h b/common/database/database_dump_service.h index 096d4c5d3..eb87520da 100644 --- a/common/database/database_dump_service.h +++ b/common/database/database_dump_service.h @@ -45,16 +45,22 @@ public: void SetDumpPath(const std::string &dump_path); const std::string &GetDumpFileName() const; void SetDumpFileName(const std::string &dump_file_name); + bool IsDumpQueryServerTables() const; + void SetDumpQueryServerTables(bool dump_query_server_tables); + bool IsDumpOutputToConsole() const; + void SetDumpOutputToConsole(bool dump_output_to_console); private: - bool dump_all_tables; - bool dump_system_tables; - bool dump_content_tables; - bool dump_player_tables; - bool dump_login_server_tables; - bool dump_with_no_data; - bool dump_no_table_lock; - bool dump_with_compression; + bool dump_all_tables = false; + bool dump_system_tables = false; + bool dump_content_tables = false; + bool dump_player_tables = false; + bool dump_query_server_tables = false; + bool dump_login_server_tables = false; + bool dump_with_no_data = false; + bool dump_no_table_lock = false; + bool dump_with_compression = false; + bool dump_output_to_console = false; std::string dump_path; std::string dump_file_name; @@ -71,6 +77,7 @@ private: bool HasCompressionBinary(); std::string GetDumpFileNameWithPath(); std::string GetSetDumpPath(); + std::string GetQueryServTables(); }; diff --git a/common/database_schema.h b/common/database_schema.h index b497ad474..5502441d0 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -233,7 +233,6 @@ namespace DatabaseSchema { "task_activities", "tasks", "tasksets", - "titles", "tradeskill_recipe", "tradeskill_recipe_entries", "traps", @@ -282,6 +281,32 @@ namespace DatabaseSchema { }; } + /** + * Gets QueryServer tables + * + * @return + */ + static std::vector GetQueryServerTables() + { + return { + "qs_merchant_transaction_record", + "qs_merchant_transaction_record_entries", + "qs_player_aa_rate_hourly", + "qs_player_delete_record", + "qs_player_delete_record_entries", + "qs_player_events", + "qs_player_handin_record", + "qs_player_handin_record_entries", + "qs_player_move_record", + "qs_player_move_record_entries", + "qs_player_npc_kill_record", + "qs_player_npc_kill_record_entries", + "qs_player_speech", + "qs_player_trade_record", + "qs_player_trade_record_entries", + }; + } + /** * Gets state tables * Tables that keep track of server state diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 565277f97..32e794800 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -225,9 +225,11 @@ namespace WorldserverCommandHandler { "--login-tables", "--player-tables", "--system-tables", + "--query-serv-tables", "--table-structure-only", "--no-table-lock", "--dump-path=", + "--dump-output-to-console", "--compress" }; @@ -252,9 +254,11 @@ namespace WorldserverCommandHandler { database_dump_service->SetDumpPlayerTables(cmd[{"-c", "--player-tables"}] || dump_all); database_dump_service->SetDumpSystemTables(cmd[{"-c", "--system-tables"}] || dump_all); database_dump_service->SetDumpWithNoData(cmd[{"-c", "--table-structure-only"}]); + database_dump_service->SetDumpQueryServerTables(cmd[{"--query-serv-tables"}]); database_dump_service->SetDumpAllTables(dump_all); database_dump_service->SetDumpNoTableLock(cmd[{"--no-table-lock"}]); database_dump_service->SetDumpWithCompression(cmd[{"--compress"}]); + database_dump_service->SetDumpOutputToConsole(cmd[{"--dump-output-to-console"}]); /** * Dump