20#ifndef OPM_MESSAGELIMITER_HEADER_INCLUDED
21#define OPM_MESSAGELIMITER_HEADER_INCLUDED
27#include <unordered_map>
55 : tag_limit_(tag_limit < 0 ?
NoLimit : tag_limit),
66 MessageLimiter(
const int tag_limit,
const std::map<int64_t, int>& category_limits)
67 : tag_limit_(tag_limit < 0 ?
NoLimit : tag_limit),
68 category_limits_(category_limits)
79 if (category_limits_.find(category) == category_limits_.end()) {
80 category_limits_[category] =
NoLimit;
94 return category_limits_;
100 return category_counts_;
107 PrintMessage, JustOverTagLimit, JustOverCategoryLimit, OverTagLimit, OverCategoryLimit
122 if (!tag.empty() && tag_limit_ !=
NoLimit) {
124 auto it = tag_counts_.find(tag);
125 if (it != tag_counts_.end()) {
127 const int count = ++it->second;
128 res = countBasedResponseTag(
count);
131 tag_counts_.insert({tag, 1});
132 res = countBasedResponseTag(1);
140 const int count = ++category_counts_[messageMask];
141 if (category_limits_[messageMask] !=
NoLimit) {
142 res = countBasedResponseCategory(
count, messageMask);
152 if (
count <= tag_limit_) {
154 }
else if (
count == tag_limit_ + 1) {
162 Response countBasedResponseCategory(
const int count,
const int64_t messageMask)
const
164 const int limit = category_limits_.at(messageMask);
165 if (
count <= limit) {
167 }
else if (
count == limit + 1) {
175 std::unordered_map<std::string, int> tag_counts_;
176 std::map<int64_t, int> category_limits_;
int count
Definition: cJSON.h:212
const char *const string
Definition: cJSON.h:170
Handles limiting the number of messages with the same tag.
Definition: MessageLimiter.hpp:37
Response handleMessageLimits(const std::string &tag, const int64_t messageMask)
Definition: MessageLimiter.hpp:117
const std::map< int64_t, int > & categoryMessageCounts() const
The category message counts.
Definition: MessageLimiter.hpp:98
Response
Definition: MessageLimiter.hpp:106
MessageLimiter(const int tag_limit)
Definition: MessageLimiter.hpp:54
const std::map< int64_t, int > & categoryMessageLimits() const
The category message limits.
Definition: MessageLimiter.hpp:92
int tagMessageLimit() const
The tag message limit (same for all tags).
Definition: MessageLimiter.hpp:86
MessageLimiter(const int tag_limit, const std::map< int64_t, int > &category_limits)
Definition: MessageLimiter.hpp:66
@ NoLimit
Definition: MessageLimiter.hpp:40
MessageLimiter()
Default constructor, no limit to the number of messages.
Definition: MessageLimiter.hpp:43
const int64_t Bug
Definition: LogUtil.hpp:38
const int64_t Problem
Definition: LogUtil.hpp:37
const int64_t Debug
Definition: LogUtil.hpp:32
const int64_t Info
Definition: LogUtil.hpp:34
const int64_t Note
Definition: LogUtil.hpp:33
const int64_t Error
Definition: LogUtil.hpp:36
const int64_t Warning
Definition: LogUtil.hpp:35