Loading cmds/statsd/src/metrics/ValueMetricProducer.cpp +11 −5 Original line number Original line Diff line number Diff line Loading @@ -87,7 +87,8 @@ ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric mDimensionHardLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) != mDimensionHardLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) != StatsdStats::kAtomDimensionKeySizeLimitMap.end() StatsdStats::kAtomDimensionKeySizeLimitMap.end() ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).second ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).second : StatsdStats::kDimensionKeySizeHardLimit) { : StatsdStats::kDimensionKeySizeHardLimit), mUseAbsoluteValueOnReset(metric.use_absolute_value_on_reset()) { // TODO: valuemetric for pushed events may need unlimited bucket length // TODO: valuemetric for pushed events may need unlimited bucket length int64_t bucketSizeMills = 0; int64_t bucketSizeMills = 0; if (metric.has_bucket()) { if (metric.has_bucket()) { Loading Loading @@ -393,15 +394,20 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked( } } } else { } else { // Generally we expect value to be monotonically increasing. // Generally we expect value to be monotonically increasing. // If not, there was a reset event. We take the absolute value as // If not, take absolute value or drop it, based on config. // diff in this case. if (interval.startUpdated) { if (interval.startUpdated) { if (value >= interval.start) { if (value >= interval.start) { interval.sum += (value - interval.start); interval.sum += (value - interval.start); interval.hasValue = true; } else { } else { if (mUseAbsoluteValueOnReset) { interval.sum += value; interval.sum += value; } interval.hasValue = true; interval.hasValue = true; } else { VLOG("Dropping data for atom %d, prev: %lld, now: %lld", mPullTagId, (long long)interval.start, (long long)value); } } interval.startUpdated = false; interval.startUpdated = false; } else { } else { VLOG("No start for matching end %lld", (long long)value); VLOG("No start for matching end %lld", (long long)value); Loading cmds/statsd/src/metrics/ValueMetricProducer.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -164,6 +164,8 @@ private: const size_t mDimensionHardLimit; const size_t mDimensionHardLimit; const bool mUseAbsoluteValueOnReset; FRIEND_TEST(ValueMetricProducerTest, TestNonDimensionalEvents); FRIEND_TEST(ValueMetricProducerTest, TestNonDimensionalEvents); FRIEND_TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition); FRIEND_TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition); FRIEND_TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade); FRIEND_TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade); Loading cmds/statsd/src/statsd_config.proto +2 −0 Original line number Original line Diff line number Diff line Loading @@ -265,6 +265,8 @@ message ValueMetric { optional AggregationType aggregation_type = 8 [default = SUM]; optional AggregationType aggregation_type = 8 [default = SUM]; optional int64 min_bucket_size_nanos = 10; optional int64 min_bucket_size_nanos = 10; optional bool use_absolute_value_on_reset = 11 [default = false]; } } message Alert { message Alert { Loading Loading
cmds/statsd/src/metrics/ValueMetricProducer.cpp +11 −5 Original line number Original line Diff line number Diff line Loading @@ -87,7 +87,8 @@ ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric mDimensionHardLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) != mDimensionHardLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) != StatsdStats::kAtomDimensionKeySizeLimitMap.end() StatsdStats::kAtomDimensionKeySizeLimitMap.end() ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).second ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).second : StatsdStats::kDimensionKeySizeHardLimit) { : StatsdStats::kDimensionKeySizeHardLimit), mUseAbsoluteValueOnReset(metric.use_absolute_value_on_reset()) { // TODO: valuemetric for pushed events may need unlimited bucket length // TODO: valuemetric for pushed events may need unlimited bucket length int64_t bucketSizeMills = 0; int64_t bucketSizeMills = 0; if (metric.has_bucket()) { if (metric.has_bucket()) { Loading Loading @@ -393,15 +394,20 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked( } } } else { } else { // Generally we expect value to be monotonically increasing. // Generally we expect value to be monotonically increasing. // If not, there was a reset event. We take the absolute value as // If not, take absolute value or drop it, based on config. // diff in this case. if (interval.startUpdated) { if (interval.startUpdated) { if (value >= interval.start) { if (value >= interval.start) { interval.sum += (value - interval.start); interval.sum += (value - interval.start); interval.hasValue = true; } else { } else { if (mUseAbsoluteValueOnReset) { interval.sum += value; interval.sum += value; } interval.hasValue = true; interval.hasValue = true; } else { VLOG("Dropping data for atom %d, prev: %lld, now: %lld", mPullTagId, (long long)interval.start, (long long)value); } } interval.startUpdated = false; interval.startUpdated = false; } else { } else { VLOG("No start for matching end %lld", (long long)value); VLOG("No start for matching end %lld", (long long)value); Loading
cmds/statsd/src/metrics/ValueMetricProducer.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -164,6 +164,8 @@ private: const size_t mDimensionHardLimit; const size_t mDimensionHardLimit; const bool mUseAbsoluteValueOnReset; FRIEND_TEST(ValueMetricProducerTest, TestNonDimensionalEvents); FRIEND_TEST(ValueMetricProducerTest, TestNonDimensionalEvents); FRIEND_TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition); FRIEND_TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition); FRIEND_TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade); FRIEND_TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade); Loading
cmds/statsd/src/statsd_config.proto +2 −0 Original line number Original line Diff line number Diff line Loading @@ -265,6 +265,8 @@ message ValueMetric { optional AggregationType aggregation_type = 8 [default = SUM]; optional AggregationType aggregation_type = 8 [default = SUM]; optional int64 min_bucket_size_nanos = 10; optional int64 min_bucket_size_nanos = 10; optional bool use_absolute_value_on_reset = 11 [default = false]; } } message Alert { message Alert { Loading