diff --git a/README.md b/README.md index 9816db917..a0c74e490 100644 --- a/README.md +++ b/README.md @@ -503,3 +503,5 @@ This is a Work in Progress, but below are some quick links to documentaion for s * pwjones1969 * [Simon](https://github.com/SimonNitzsche) * [ALL OF THE NETDEVIL AND LEGO TEAMS!](https://www.mobygames.com/game/macintosh/lego-universe/credits) + +This codebase uses some amount of AI assistance. Some larger portions may be AI generated as well. Do not use AI tools against the repo however to work on issues. Auto generated PR's/issues may be discarded as spam if done in large amounts. diff --git a/dAuthServer/AuthServer.cpp b/dAuthServer/AuthServer.cpp index 505b1f1a3..0e1a47bee 100644 --- a/dAuthServer/AuthServer.cpp +++ b/dAuthServer/AuthServer.cpp @@ -40,7 +40,9 @@ void HandlePacket(Packet* packet); int main(int argc, char** argv) { constexpr uint32_t authFramerate = mediumFramerate; constexpr uint32_t authFrameDelta = mediumFrameDelta; - Diagnostics::SetProcessName("Auth"); + const auto curTimeStr = std::to_string(time(nullptr)); + const auto serviceName = "AuthServer_" + curTimeStr; + Diagnostics::SetProcessName(serviceName); Diagnostics::SetProcessFileName(argv[0]); Diagnostics::Initialize(); @@ -50,7 +52,7 @@ int main(int argc, char** argv) { Game::config = new dConfig("authconfig.ini"); //Create all the objects we need to run our service: - Server::SetupLogger("AuthServer"); + Server::SetupLogger(serviceName, "AuthServer"); if (!Game::logger) return EXIT_FAILURE; Game::config->LogSettings(); @@ -62,7 +64,7 @@ int main(int argc, char** argv) { Database::Connect(); } catch (std::exception& ex) { LOG("Got an error while connecting to the database: %s", ex.what()); - Database::Destroy("AuthServer"); + Database::Destroy(serviceName); delete Game::server; delete Game::logger; return EXIT_FAILURE; @@ -156,7 +158,7 @@ int main(int argc, char** argv) { LOG("Exited Main Loop! (signal %d)", Game::lastSignal); //Delete our objects here: - Database::Destroy("AuthServer"); + Database::Destroy(serviceName); delete Game::server; delete Game::logger; delete Game::config; diff --git a/dChatServer/ChatServer.cpp b/dChatServer/ChatServer.cpp index 13f2bde02..89002f0da 100644 --- a/dChatServer/ChatServer.cpp +++ b/dChatServer/ChatServer.cpp @@ -47,7 +47,9 @@ void HandlePacket(Packet* packet); int main(int argc, char** argv) { constexpr uint32_t chatFramerate = mediumFramerate; constexpr uint32_t chatFrameDelta = mediumFrameDelta; - Diagnostics::SetProcessName("Chat"); + const auto curTimeStr = std::to_string(time(nullptr)); + const auto serviceName = "ChatServer_" + curTimeStr; + Diagnostics::SetProcessName(serviceName); Diagnostics::SetProcessFileName(argv[0]); Diagnostics::Initialize(); @@ -57,7 +59,7 @@ int main(int argc, char** argv) { Game::config = new dConfig("chatconfig.ini"); //Create all the objects we need to run our service: - Server::SetupLogger("ChatServer"); + Server::SetupLogger(serviceName, "ChatServer"); if (!Game::logger) return EXIT_FAILURE; Game::config->LogSettings(); @@ -88,7 +90,7 @@ int main(int argc, char** argv) { Database::Connect(); } catch (std::exception& ex) { LOG("Got an error while connecting to the database: %s", ex.what()); - Database::Destroy("ChatServer"); + Database::Destroy(serviceName); delete Game::logger; delete Game::config; return EXIT_FAILURE; @@ -99,7 +101,7 @@ int main(int argc, char** argv) { if (Game::config->GetValue("web_server_enabled") == "1" && !Game::web.Startup("localhost", web_server_port)) { // if we want the web server and it fails to start, exit LOG("Failed to start web server, shutting down."); - Database::Destroy("ChatServer"); + Database::Destroy(serviceName); delete Game::logger; delete Game::config; return EXIT_FAILURE; @@ -200,7 +202,7 @@ int main(int argc, char** argv) { Game::playerContainer.Shutdown(); TeamContainer::Shutdown(); //Delete our objects here: - Database::Destroy("ChatServer"); + Database::Destroy(serviceName); delete Game::server; Game::server = nullptr; delete Game::logger; diff --git a/dCommon/Diagnostics.cpp b/dCommon/Diagnostics.cpp index 9f1291945..e0c22af6e 100644 --- a/dCommon/Diagnostics.cpp +++ b/dCommon/Diagnostics.cpp @@ -82,7 +82,7 @@ struct bt_ctx { }; static inline void Bt(struct backtrace_state* state) { - std::string fileName = Diagnostics::GetOutDirectory() + "crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log"; + std::string fileName = Diagnostics::GetOutDirectory() + "Crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log"; LOG("backtrace is enabled, crash dump located at %s", fileName.c_str()); FILE* file = fopen(fileName.c_str(), "w+"); if (file != nullptr) { @@ -98,7 +98,7 @@ static void ErrorCallback(void* data, const char* msg, int errnum) { fprintf(stderr, "ERROR: %s (%d)", msg, errnum); ctx->error = 1; - std::string fileName = Diagnostics::GetOutDirectory() + "crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log"; + std::string fileName = Diagnostics::GetOutDirectory() + "Crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log"; FILE* file = fopen(fileName.c_str(), "w+"); if (file != nullptr) { fprintf(file, "ERROR: %s (%d)", msg, errnum); @@ -126,7 +126,7 @@ void CatchUnhandled(int sig) { #ifndef INCLUDE_BACKTRACE - std::string fileName = Diagnostics::GetOutDirectory() + "crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log"; + std::string fileName = Diagnostics::GetOutDirectory() + "Crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log"; LOG("Encountered signal %i, creating crash dump %s", sig, fileName.c_str()); if (Diagnostics::GetProduceMemoryDump()) { GenerateDump(); diff --git a/dMasterServer/MasterServer.cpp b/dMasterServer/MasterServer.cpp index 4fd89fbe5..240decdfe 100644 --- a/dMasterServer/MasterServer.cpp +++ b/dMasterServer/MasterServer.cpp @@ -61,6 +61,10 @@ namespace Game { std::mt19937 randomEngine; } //namespace Game +namespace { + std::string g_ServiceName; +} + bool shutdownSequenceStarted = false; int ShutdownSequence(int32_t signal = -1); int32_t FinalizeShutdown(int32_t signal = -1); @@ -80,7 +84,9 @@ int GenerateBCryptPassword(const std::string& password, const int workFactor, ch int main(int argc, char** argv) { constexpr uint32_t masterFramerate = mediumFramerate; constexpr uint32_t masterFrameDelta = mediumFrameDelta; - Diagnostics::SetProcessName("Master"); + const auto curTimeStr = std::to_string(time(nullptr)); + g_ServiceName = "MasterServer_" + curTimeStr; + Diagnostics::SetProcessName(g_ServiceName); Diagnostics::SetProcessFileName(argv[0]); Diagnostics::Initialize(); @@ -96,7 +102,7 @@ int main(int argc, char** argv) { Game::config = new dConfig("masterconfig.ini"); //Create all the objects we need to run our service: - Server::SetupLogger("MasterServer"); + Server::SetupLogger(g_ServiceName, "MasterServer"); if (!Game::logger) return EXIT_FAILURE; Game::config->LogSettings(); @@ -914,7 +920,7 @@ int ShutdownSequence(int32_t signal) { int32_t FinalizeShutdown(int32_t signal) { //Delete our objects here: - Database::Destroy("MasterServer"); + Database::Destroy(g_ServiceName); if (Game::config) delete Game::config; Game::config = nullptr; if (Game::im) delete Game::im; diff --git a/dServer/Server.cpp b/dServer/Server.cpp index 3b9ba2bb3..ea51b7604 100644 --- a/dServer/Server.cpp +++ b/dServer/Server.cpp @@ -5,17 +5,18 @@ #include "Logger.h" #include "dConfig.h" -void Server::SetupLogger(const std::string_view serviceName) { +void Server::SetupLogger(const std::string_view serviceName, const std::string_view folder) { if (Game::logger) { LOG("A logger has already been setup, skipping."); return; } - const auto logsDir = BinaryPathFinder::GetBinaryDir() / "logs"; + auto logsDir = BinaryPathFinder::GetBinaryDir() / "logs"; + if (!folder.empty()) logsDir /= folder; if (!std::filesystem::exists(logsDir)) std::filesystem::create_directories(logsDir); - std::string logPath = (logsDir / serviceName).string() + "_" + std::to_string(time(nullptr)) + ".log"; + std::string logPath = (logsDir / serviceName).string() + ".log"; bool logToConsole = false; bool logDebugStatements = false; #ifdef _DEBUG diff --git a/dServer/Server.h b/dServer/Server.h index 4e9f2543d..eac04cada 100644 --- a/dServer/Server.h +++ b/dServer/Server.h @@ -4,7 +4,8 @@ #include namespace Server { - void SetupLogger(const std::string_view serviceName); + // takes in an optional argument of folder should you want to place the logs in a sub-folder + void SetupLogger(const std::string_view serviceName, const std::string_view folder = ""); }; #endif //!__SERVER__H__ diff --git a/dWorldServer/WorldServer.cpp b/dWorldServer/WorldServer.cpp index d34e612bc..07beab0f1 100644 --- a/dWorldServer/WorldServer.cpp +++ b/dWorldServer/WorldServer.cpp @@ -99,6 +99,10 @@ namespace Game { std::string projectVersion = PROJECT_VERSION; } // namespace Game +namespace { + std::string g_ServiceName; +} + namespace { struct TempSessionInfo { SystemAddress sysAddr; @@ -125,7 +129,10 @@ void HandleMasterPacket(Packet* packet); void HandlePacket(Packet* packet); int main(int argc, char** argv) { - Diagnostics::SetProcessName("World"); + const auto curTimeStr = std::to_string(time(nullptr)); + g_ServiceName = "WorldServer"; + // Set this once here before we parse a bunch of options in case we crash early + Diagnostics::SetProcessName(g_ServiceName); Diagnostics::SetProcessFileName(argv[0]); Diagnostics::Initialize(); @@ -158,7 +165,13 @@ int main(int argc, char** argv) { Game::config = new dConfig("worldconfig.ini"); //Create all the objects we need to run our service: - Server::SetupLogger("WorldServer_" + std::to_string(zoneID) + "_" + std::to_string(g_InstanceID)); + const auto zoneStr = std::to_string(zoneID); + const auto cloneStr = std::to_string(cloneID); + const auto instanceStr = std::to_string(g_InstanceID); + g_ServiceName += "_" + zoneStr + "_" + cloneStr + "_" + instanceStr + "_" + curTimeStr; + // Here we re-set the process name since it'll have more info now + Diagnostics::SetProcessName(g_ServiceName); + Server::SetupLogger(g_ServiceName, "WorldServer/" + zoneStr + "/" + cloneStr + "/"); if (!Game::logger) return EXIT_FAILURE; Game::config->LogSettings(); @@ -1586,7 +1599,7 @@ void FinalizeShutdown() { //Delete our objects here: dpWorld::Shutdown(); - Database::Destroy("WorldServer"); + Database::Destroy(g_ServiceName); if (Game::chatFilter) delete Game::chatFilter; Game::chatFilter = nullptr; if (Game::zoneManager) delete Game::zoneManager;