mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-05 01:35:45 +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)
|
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);
|
logMessage(statusMessage);
|
||||||
emit localMessageLogged(statusMessage);
|
emit localMessageLogged(statusMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,10 @@
|
|||||||
#include "blackmisc/logcategory.h"
|
#include "blackmisc/logcategory.h"
|
||||||
#include "blackmisc/logpattern.h"
|
#include "blackmisc/logpattern.h"
|
||||||
#include "blackmisc/statusmessage.h"
|
#include "blackmisc/statusmessage.h"
|
||||||
|
#include "blackmisc/tokenbucket.h"
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QHash>
|
||||||
#include <QMetaMethod>
|
#include <QMetaMethod>
|
||||||
#include <QMetaObject>
|
#include <QMetaObject>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
@@ -105,6 +107,7 @@ namespace BlackMisc
|
|||||||
QList<PatternPair> m_patternHandlers;
|
QList<PatternPair> m_patternHandlers;
|
||||||
QList<CLogPatternHandler *> handlersForMessage(const CStatusMessage &message) const;
|
QList<CLogPatternHandler *> handlersForMessage(const CStatusMessage &message) const;
|
||||||
void removePatternHandler(CLogPatternHandler *);
|
void removePatternHandler(CLogPatternHandler *);
|
||||||
|
QHash<CStatusMessage, std::pair<CTokenBucket, int>> m_tokenBuckets;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -362,7 +362,7 @@ namespace BlackMisc
|
|||||||
BLACK_METAMEMBER(severity),
|
BLACK_METAMEMBER(severity),
|
||||||
BLACK_METAMEMBER(message),
|
BLACK_METAMEMBER(message),
|
||||||
BLACK_METAMEMBER(args),
|
BLACK_METAMEMBER(args),
|
||||||
BLACK_METAMEMBER(timestampMSecsSinceEpoch)
|
BLACK_METAMEMBER(timestampMSecsSinceEpoch, 0, DisabledForHashing | DisabledForComparison)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user