summaryrefslogtreecommitdiff
path: root/src/mongo/db/stats/counters.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/stats/counters.h')
-rw-r--r--src/mongo/db/stats/counters.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/mongo/db/stats/counters.h b/src/mongo/db/stats/counters.h
index 154131ffc30..aa11c84c2f1 100644
--- a/src/mongo/db/stats/counters.h
+++ b/src/mongo/db/stats/counters.h
@@ -252,6 +252,37 @@ public:
extern AggStageCounters aggStageCounters;
+class OperatorCountersAggExpressions {
+private:
+ struct AggExprCounter {
+ AggExprCounter(StringData name)
+ : metric("operatorCounters.expressions." + name, &counter) {}
+
+ Counter64 counter;
+ ServerStatusMetricField<Counter64> metric;
+ };
+
+public:
+ void addAggExpressionCounter(StringData name) {
+ operatorCountersAggExpressionMap[name] = std::make_unique<AggExprCounter>(name);
+ }
+
+ void mergeCounters(StringMap<uint64_t>& toMerge) {
+ for (auto&& [name, cnt] : toMerge) {
+ if (auto it = operatorCountersAggExpressionMap.find(name);
+ it != operatorCountersAggExpressionMap.end()) {
+ it->second->counter.increment(cnt);
+ }
+ }
+ }
+
+private:
+ // Map of aggregation expressions to the number of occurrences in aggregation pipelines.
+ StringMap<std::unique_ptr<AggExprCounter>> operatorCountersAggExpressionMap = {};
+};
+
+extern OperatorCountersAggExpressions operatorCountersAggExpressions;
+
/**
* Global counters for match expressions.
*/