diff options
author | Milena Ivanova <milena.ivanova@mongodb.com> | 2021-05-28 09:24:11 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-08-05 08:24:59 +0000 |
commit | 98b4a0a2b2c4a230efe1c2ddc3da487a575d670d (patch) | |
tree | 7269ee48a69bfaea61b77a8d3f78bc072735b3b0 /src/mongo/db/stats/counters.h | |
parent | 85976973ce08a8d7dedbcc108d4ace00c25c9b04 (diff) | |
download | mongo-98b4a0a2b2c4a230efe1c2ddc3da487a575d670d.tar.gz |
SERVER-56602 Track usage of match expressions in serverStatus
Diffstat (limited to 'src/mongo/db/stats/counters.h')
-rw-r--r-- | src/mongo/db/stats/counters.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/mongo/db/stats/counters.h b/src/mongo/db/stats/counters.h index 397951bdd7b..18e39b1366a 100644 --- a/src/mongo/db/stats/counters.h +++ b/src/mongo/db/stats/counters.h @@ -363,4 +363,37 @@ private: }; extern OperatorCountersExpressions operatorCountersExpressions; + +/** + * Global counters for match expressions. + */ +class OperatorCountersMatchExpressions { +private: + struct MatchExprCounter { + MatchExprCounter(StringData name) : metric("operatorCounters.match." + name, &counter) {} + + Counter64 counter; + ServerStatusMetricField<Counter64> metric; + }; + +public: + void addMatchExprCounter(StringData name) { + operatorCountersMatchExprMap[name] = std::make_unique<MatchExprCounter>(name); + } + + void mergeCounters(StringMap<uint64_t>& toMerge) { + for (auto&& [name, cnt] : toMerge) { + if (auto it = operatorCountersMatchExprMap.find(name); + it != operatorCountersMatchExprMap.end()) { + it->second->counter.increment(cnt); + } + } + } + +private: + // Map of match expressions to the number of occurrences in queries. + StringMap<std::unique_ptr<MatchExprCounter>> operatorCountersMatchExprMap = {}; +}; + +extern OperatorCountersMatchExpressions operatorCountersMatchExpressions; } // namespace mongo |