mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 04:25:35 +08:00
Ref T184 Use CTokenBucket to throttle identical log messages.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
#include "blackmisc/logcategory.h"
|
||||
#include "blackmisc/logpattern.h"
|
||||
#include "blackmisc/statusmessage.h"
|
||||
#include "blackmisc/tokenbucket.h"
|
||||
|
||||
#include <QList>
|
||||
#include <QHash>
|
||||
#include <QMetaMethod>
|
||||
#include <QMetaObject>
|
||||
#include <QObject>
|
||||
@@ -105,6 +107,7 @@ namespace BlackMisc
|
||||
QList<PatternPair> m_patternHandlers;
|
||||
QList<CLogPatternHandler *> handlersForMessage(const CStatusMessage &message) const;
|
||||
void removePatternHandler(CLogPatternHandler *);
|
||||
QHash<CStatusMessage, std::pair<CTokenBucket, int>> m_tokenBuckets;
|
||||
};
|
||||
|
||||
/*!
|
||||
|
||||
@@ -362,7 +362,7 @@ namespace BlackMisc
|
||||
BLACK_METAMEMBER(severity),
|
||||
BLACK_METAMEMBER(message),
|
||||
BLACK_METAMEMBER(args),
|
||||
BLACK_METAMEMBER(timestampMSecsSinceEpoch)
|
||||
BLACK_METAMEMBER(timestampMSecsSinceEpoch, 0, DisabledForHashing | DisabledForComparison)
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user