From ede0e7f26807eae02272aa42e9d3d8e2b4383925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 21 Oct 2024 10:40:20 +0000 Subject: [PATCH] MySQL_Logger::getAllMetrics() Added function MySQL_Logger::getAllMetrics() to export all metrics related to eventlogs --- include/MySQL_Logger.hpp | 17 +++++++++++++++-- lib/MySQL_Logger.cpp | 24 ++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/include/MySQL_Logger.hpp b/include/MySQL_Logger.hpp index 0ec3bacd6..eda0c7cb7 100644 --- a/include/MySQL_Logger.hpp +++ b/include/MySQL_Logger.hpp @@ -324,8 +324,8 @@ private: std::atomic totalEventsCopiedToMemory; /** @brief Total number of events copied to the on-disk database. */ std::atomic totalEventsCopiedToDisk; - std::atomic eventsAddedToBufferCount; ///< Total number of events added to the buffer. - std::atomic eventsCurrentlyInBufferCount; ///< Number of events currently in the buffer. + //std::atomic eventsAddedToBufferCount; ///< Total number of events added to the buffer. + //std::atomic eventsCurrentlyInBufferCount; ///< Number of events currently in the buffer. } metrics; @@ -494,6 +494,19 @@ public: * The function assumes ownership of the MySQL_Event pointers and deletes them after processing. */ int processEvents(SQLite3DB * statsdb , SQLite3DB * statsdb_disk); + + /** + * @brief Retrieves all performance metrics from the logger and circular buffer. + * @return An unordered map containing all performance metrics. + * The keys are strings representing the metric names, and the values are unsigned long long integers representing the metric values. + * + * This function gathers all relevant performance metrics from the logger's internal EventLogMetrics structure and the circular buffer. + * It returns these metrics as a key-value map for easy access. + * The function ensures thread safety by acquiring a lock on the circular buffer's mutex before accessing its internal metrics. + */ + std::unordered_map getAllMetrics() const; + + }; diff --git a/lib/MySQL_Logger.cpp b/lib/MySQL_Logger.cpp index 06066f24e..72e283b88 100644 --- a/lib/MySQL_Logger.cpp +++ b/lib/MySQL_Logger.cpp @@ -531,8 +531,7 @@ uint64_t MySQL_Event::write_query_format_2_json(std::fstream *f) { extern Query_Processor *GloQPro; -//MySQL_Logger::MySQL_Logger() : metrics{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} { -MySQL_Logger::MySQL_Logger() : metrics{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} { +MySQL_Logger::MySQL_Logger() : metrics{0, 0, 0, 0, 0, 0, 0, 0, 0} { events.enabled=false; events.base_filename=NULL; events.datadir=NULL; @@ -1348,3 +1347,24 @@ int MySQL_Logger::processEvents(SQLite3DB * statsdb , SQLite3DB * statsdb_disk) return ret; } + +std::unordered_map MySQL_Logger::getAllMetrics() const { + std::unordered_map allMetrics; + + allMetrics["memoryCopyCount"] = metrics.memoryCopyCount; + allMetrics["diskCopyCount"] = metrics.diskCopyCount; + allMetrics["getAllEventsCallsCount"] = metrics.getAllEventsCallsCount; + allMetrics["getAllEventsEventsCount"] = metrics.getAllEventsEventsCount; + allMetrics["totalMemoryCopyTimeMicros"] = metrics.totalMemoryCopyTimeMicros; + allMetrics["totalDiskCopyTimeMicros"] = metrics.totalDiskCopyTimeMicros; + allMetrics["totalGetAllEventsDiskCopyTimeMicros"] = metrics.totalGetAllEventsDiskCopyTimeMicros; + allMetrics["totalEventsCopiedToMemory"] = metrics.totalEventsCopiedToMemory; + allMetrics["totalEventsCopiedToDisk"] = metrics.totalEventsCopiedToDisk; + //allMetrics["eventsAddedToBufferCount"] = metrics.eventsAddedToBufferCount; + //allMetrics["eventsDroppedFromBufferCount"] = metrics.eventsDroppedFromBufferCount; + allMetrics["circularBuffereventsAddedCount"] = MyLogCB->getEventsAddedCount(); + allMetrics["circularBufferEventsDroppedCount"] = MyLogCB->getEventsDroppedCount(); + allMetrics["circularBufferEventsSize"] = MyLogCB->size(); + + return allMetrics; +}