diff options
-rw-r--r-- | cmds/statsd/src/guardrail/StatsdStats.cpp | 5 | ||||
-rw-r--r-- | cmds/statsd/src/guardrail/StatsdStats.h | 6 | ||||
-rw-r--r-- | cmds/statsd/src/metrics/CountMetricProducer.cpp | 1 | ||||
-rw-r--r-- | cmds/statsd/src/metrics/DurationMetricProducer.cpp | 1 | ||||
-rw-r--r-- | cmds/statsd/src/metrics/EventMetricProducer.cpp | 1 | ||||
-rw-r--r-- | cmds/statsd/src/metrics/GaugeMetricProducer.cpp | 1 | ||||
-rw-r--r-- | cmds/statsd/src/metrics/ValueMetricProducer.cpp | 1 | ||||
-rw-r--r-- | cmds/statsd/src/stats_log.proto | 1 | ||||
-rw-r--r-- | cmds/statsd/src/stats_log_util.cpp | 3 |
9 files changed, 20 insertions, 0 deletions
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp index a5bd5c6b6364..37d5ba0e6801 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.cpp +++ b/cmds/statsd/src/guardrail/StatsdStats.cpp @@ -443,6 +443,11 @@ void StatsdStats::noteBadValueType(int metricId) { getAtomMetricStats(metricId).badValueType++; } +void StatsdStats::noteBucketDropped(int metricId) { + lock_guard<std::mutex> lock(mLock); + getAtomMetricStats(metricId).bucketDropped++; +} + void StatsdStats::noteConditionChangeInNextBucket(int metricId) { lock_guard<std::mutex> lock(mLock); getAtomMetricStats(metricId).conditionChangeInNextBucket++; diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index cb17061c1ed1..20ea7e5df1fa 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -360,6 +360,11 @@ public: void noteBadValueType(int atomId); /** + * Buckets were dropped due to reclaim memory. + */ + void noteBucketDropped(int metricId); + + /** * A condition change was too late, arrived in the wrong bucket and was skipped */ void noteConditionChangeInNextBucket(int atomId); @@ -414,6 +419,7 @@ public: long badValueType = 0; long conditionChangeInNextBucket = 0; long invalidatedBucket = 0; + long bucketDropped = 0; } AtomMetricStats; private: diff --git a/cmds/statsd/src/metrics/CountMetricProducer.cpp b/cmds/statsd/src/metrics/CountMetricProducer.cpp index 7cc57c12063c..350745b2c326 100644 --- a/cmds/statsd/src/metrics/CountMetricProducer.cpp +++ b/cmds/statsd/src/metrics/CountMetricProducer.cpp @@ -243,6 +243,7 @@ void CountMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, void CountMetricProducer::dropDataLocked(const int64_t dropTimeNs) { flushIfNeededLocked(dropTimeNs); + StatsdStats::getInstance().noteBucketDropped(mMetricId); mPastBuckets.clear(); } diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.cpp b/cmds/statsd/src/metrics/DurationMetricProducer.cpp index 69bafc354643..6c1c47bbc093 100644 --- a/cmds/statsd/src/metrics/DurationMetricProducer.cpp +++ b/cmds/statsd/src/metrics/DurationMetricProducer.cpp @@ -444,6 +444,7 @@ void DurationMetricProducer::onConditionChangedLocked(const bool conditionMet, void DurationMetricProducer::dropDataLocked(const int64_t dropTimeNs) { flushIfNeededLocked(dropTimeNs); + StatsdStats::getInstance().noteBucketDropped(mMetricId); mPastBuckets.clear(); } diff --git a/cmds/statsd/src/metrics/EventMetricProducer.cpp b/cmds/statsd/src/metrics/EventMetricProducer.cpp index c53c4ce5e0d6..7e695a69988f 100644 --- a/cmds/statsd/src/metrics/EventMetricProducer.cpp +++ b/cmds/statsd/src/metrics/EventMetricProducer.cpp @@ -77,6 +77,7 @@ EventMetricProducer::~EventMetricProducer() { void EventMetricProducer::dropDataLocked(const int64_t dropTimeNs) { mProto->clear(); + StatsdStats::getInstance().noteBucketDropped(mMetricId); } void EventMetricProducer::onSlicedConditionMayChangeLocked(bool overallCondition, diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp index c9b71659aa58..2609937924ac 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp @@ -510,6 +510,7 @@ void GaugeMetricProducer::updateCurrentSlicedBucketForAnomaly() { void GaugeMetricProducer::dropDataLocked(const int64_t dropTimeNs) { flushIfNeededLocked(dropTimeNs); + StatsdStats::getInstance().noteBucketDropped(mMetricId); mPastBuckets.clear(); } diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 9fb78e780870..d52c9ef28132 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -175,6 +175,7 @@ void ValueMetricProducer::onSlicedConditionMayChangeLocked(bool overallCondition void ValueMetricProducer::dropDataLocked(const int64_t dropTimeNs) { flushIfNeededLocked(dropTimeNs); + StatsdStats::getInstance().noteBucketDropped(mMetricId); mPastBuckets.clear(); } diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto index 5b9148283bdc..73aab4847e11 100644 --- a/cmds/statsd/src/stats_log.proto +++ b/cmds/statsd/src/stats_log.proto @@ -418,6 +418,7 @@ message StatsdStatsReport { optional int64 bad_value_type = 5; optional int64 condition_change_in_next_bucket = 6; optional int64 invalidated_bucket = 7; + optional int64 bucket_dropped = 8; } repeated AtomMetricStats atom_metric_stats = 17; diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp index 3cb7563b206b..f76a9ad78396 100644 --- a/cmds/statsd/src/stats_log_util.cpp +++ b/cmds/statsd/src/stats_log_util.cpp @@ -79,6 +79,7 @@ const int FIELD_ID_SKIPPED_FORWARD_BUCKETS = 4; const int FIELD_ID_BAD_VALUE_TYPE = 5; const int FIELD_ID_CONDITION_CHANGE_IN_NEXT_BUCKET = 6; const int FIELD_ID_INVALIDATED_BUCKET = 7; +const int FIELD_ID_BUCKET_DROPPED = 8; namespace { @@ -497,6 +498,8 @@ void writeAtomMetricStatsToStream(const std::pair<int, StatsdStats::AtomMetricSt (long long)pair.second.conditionChangeInNextBucket); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_INVALIDATED_BUCKET, (long long)pair.second.invalidatedBucket); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_BUCKET_DROPPED, + (long long)pair.second.bucketDropped); protoOutput->end(token); } |