From 23becf9619f1fff7d905387ca7c6866e90af3213 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Wed, 8 Nov 2017 21:27:22 +0000 Subject: [PATCH] Ref T184 Use CTokenBucket to throttle identical log messages. --- src/blackmisc/loghandler.cpp | 19 +++++++++++++++++++ src/blackmisc/loghandler.h | 3 +++ src/blackmisc/statusmessage.h | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/blackmisc/loghandler.cpp b/src/blackmisc/loghandler.cpp index 574c305cf..cfe8ffff5 100644 --- a/src/blackmisc/loghandler.cpp +++ b/src/blackmisc/loghandler.cpp @@ -126,6 +126,25 @@ namespace BlackMisc void CLogHandler::logLocalMessage(const CStatusMessage &statusMessage) { + using namespace BlackMisc::PhysicalQuantities; + auto bucket = m_tokenBuckets.find(statusMessage); + if (bucket == m_tokenBuckets.end()) { bucket = m_tokenBuckets.insert(statusMessage, { { 5, CTime(1, CTimeUnit::s()), 1 }, 0 }); } + if (! bucket->first.tryConsume()) + { + bucket->second++; + return; + } + if (bucket->second > 0) + { + auto copy = statusMessage; + copy.appendMessage(QStringLiteral(" (+%1 identical messages)").arg(bucket->second)); + bucket->second = 0; + + logMessage(copy); + emit localMessageLogged(copy); + return; + } + logMessage(statusMessage); emit localMessageLogged(statusMessage); } diff --git a/src/blackmisc/loghandler.h b/src/blackmisc/loghandler.h index 178a6bbce..99d6a1274 100644 --- a/src/blackmisc/loghandler.h +++ b/src/blackmisc/loghandler.h @@ -16,8 +16,10 @@ #include "blackmisc/logcategory.h" #include "blackmisc/logpattern.h" #include "blackmisc/statusmessage.h" +#include "blackmisc/tokenbucket.h" #include +#include #include #include #include @@ -105,6 +107,7 @@ namespace BlackMisc QList m_patternHandlers; QList handlersForMessage(const CStatusMessage &message) const; void removePatternHandler(CLogPatternHandler *); + QHash> m_tokenBuckets; }; /*! diff --git a/src/blackmisc/statusmessage.h b/src/blackmisc/statusmessage.h index 3afff1a1e..d6c4bcb60 100644 --- a/src/blackmisc/statusmessage.h +++ b/src/blackmisc/statusmessage.h @@ -362,7 +362,7 @@ namespace BlackMisc BLACK_METAMEMBER(severity), BLACK_METAMEMBER(message), BLACK_METAMEMBER(args), - BLACK_METAMEMBER(timestampMSecsSinceEpoch) + BLACK_METAMEMBER(timestampMSecsSinceEpoch, 0, DisabledForHashing | DisabledForComparison) ); };