summaryrefslogtreecommitdiff
path: root/src/mongo/db/stats/counters.h
diff options
context:
space:
mode:
authorMilena Ivanova <milena.ivanova@mongodb.com>2021-05-28 09:24:11 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-08-05 08:24:59 +0000
commit98b4a0a2b2c4a230efe1c2ddc3da487a575d670d (patch)
tree7269ee48a69bfaea61b77a8d3f78bc072735b3b0 /src/mongo/db/stats/counters.h
parent85976973ce08a8d7dedbcc108d4ace00c25c9b04 (diff)
downloadmongo-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.h33
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