From 51f0294c18a32f5e299b17576e673d6c92bf0201 Mon Sep 17 00:00:00 2001 From: Giacomo Pozzoni Date: Sat, 24 Jul 2021 14:50:30 +0200 Subject: Core/DBLayer: Add QueueSize() method (#26733) * Core/DBLayer: Add QueueSize() method Add QueueSize() method to database objects (Login, Character and World) that returns how many tasks are queued. Include the queue size of the 3 databases in ".server debug" command * Make the code less threadsafe * Send data to InfluxDB * Update grafana dashboard (cherry picked from commit 96dc110f4a353871ac74c82ff4b1bcc4c34156f3) --- src/server/database/Database/DatabaseWorkerPool.cpp | 6 ++++++ src/server/database/Database/DatabaseWorkerPool.h | 2 ++ src/server/scripts/Commands/cs_server.cpp | 4 ++++ src/server/worldserver/Main.cpp | 3 +++ 4 files changed, 15 insertions(+) (limited to 'src/server') diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp index 043db148a1e..7aa1a1e46d1 100644 --- a/src/server/database/Database/DatabaseWorkerPool.cpp +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -414,6 +414,12 @@ void DatabaseWorkerPool::Enqueue(SQLOperation* op) _queue->Push(op); } +template +size_t DatabaseWorkerPool::QueueSize() const +{ + return _queue->Size(); +} + template T* DatabaseWorkerPool::GetFreeConnection() { diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index 9852ded374e..66d5a55dffa 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -213,6 +213,8 @@ class DatabaseWorkerPool #endif } + size_t QueueSize() const; + private: uint32 OpenConnections(InternalIndex type, uint8 numConnections); diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 20b7961f13c..7306b73554c 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -249,6 +249,10 @@ public: handler->PSendSysMessage("Using %s DBC Locale as default. All available DBC locales: %s", localeNames[defaultLocale], availableLocales.c_str()); handler->PSendSysMessage("Using World DB: %s", sWorld->GetDBVersion()); + + handler->PSendSysMessage("LoginDatabase queue size: %zu", LoginDatabase.QueueSize()); + handler->PSendSysMessage("CharacterDatabase queue size: %zu", CharacterDatabase.QueueSize()); + handler->PSendSysMessage("WorldDatabase queue size: %zu", WorldDatabase.QueueSize()); return true; } diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 96d81f98f17..1fe51079f6b 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -281,6 +281,9 @@ extern int main(int argc, char** argv) sMetric->Initialize(realm.Name, *ioContext, []() { TC_METRIC_VALUE("online_players", sWorld->GetPlayerCount()); + TC_METRIC_VALUE("db_queue_login", LoginDatabase.QueueSize()); + TC_METRIC_VALUE("db_queue_character", CharacterDatabase.QueueSize()); + TC_METRIC_VALUE("db_queue_world", WorldDatabase.QueueSize()); }); TC_METRIC_EVENT("events", "Worldserver started", ""); -- cgit v1.2.3