Use TimeUnit enum to specify the bucket size.
Test: all statsd unit test passed
Change-Id: I4f6b80ba2f8c984b06e46e6de6df3e546e99a968
diff --git a/cmds/statsd/src/metrics/CountMetricProducer.cpp b/cmds/statsd/src/metrics/CountMetricProducer.cpp
index a24364d..3e98098 100644
--- a/cmds/statsd/src/metrics/CountMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/CountMetricProducer.cpp
@@ -63,8 +63,8 @@
const uint64_t startTimeNs)
: MetricProducer(metric.id(), key, startTimeNs, conditionIndex, wizard) {
// TODO: evaluate initial conditions. and set mConditionMet.
- if (metric.has_bucket() && metric.bucket().has_bucket_size_millis()) {
- mBucketSizeNs = metric.bucket().bucket_size_millis() * 1000 * 1000;
+ if (metric.has_bucket()) {
+ mBucketSizeNs = TimeUnitToBucketSizeInMillis(metric.bucket()) * 1000000;
} else {
mBucketSizeNs = LLONG_MAX;
}
diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.cpp b/cmds/statsd/src/metrics/DurationMetricProducer.cpp
index 0117b6d..3f8a8ff 100644
--- a/cmds/statsd/src/metrics/DurationMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/DurationMetricProducer.cpp
@@ -73,8 +73,8 @@
// TODO: The following boiler plate code appears in all MetricProducers, but we can't abstract
// them in the base class, because the proto generated CountMetric, and DurationMetric are
// not related. Maybe we should add a template in the future??
- if (metric.has_bucket() && metric.bucket().has_bucket_size_millis()) {
- mBucketSizeNs = metric.bucket().bucket_size_millis() * 1000000;
+ if (metric.has_bucket()) {
+ mBucketSizeNs = TimeUnitToBucketSizeInMillis(metric.bucket()) * 1000000;
} else {
mBucketSizeNs = LLONG_MAX;
}
diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
index eaf1de2..64ac6fa 100644
--- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
@@ -69,11 +69,13 @@
mAtomTagId(atomTagId) {
mCurrentSlicedBucket = std::make_shared<DimToGaugeFieldsMap>();
mCurrentSlicedBucketForAnomaly = std::make_shared<DimToValMap>();
- if (metric.has_bucket() && metric.bucket().has_bucket_size_millis()) {
- mBucketSizeNs = metric.bucket().bucket_size_millis() * 1000 * 1000;
+ int64_t bucketSizeMills = 0;
+ if (metric.has_bucket()) {
+ bucketSizeMills = TimeUnitToBucketSizeInMillis(metric.bucket());
} else {
- mBucketSizeNs = kDefaultGaugemBucketSizeNs;
+ bucketSizeMills = TimeUnitToBucketSizeInMillis(ONE_HOUR);
}
+ mBucketSizeNs = bucketSizeMills * 1000000;
mFieldFilter = metric.gauge_fields_filter();
@@ -88,8 +90,7 @@
// Kicks off the puller immediately.
if (mPullTagId != -1) {
- mStatsPullerManager->RegisterReceiver(mPullTagId, this,
- metric.bucket().bucket_size_millis());
+ mStatsPullerManager->RegisterReceiver(mPullTagId, this, bucketSizeMills);
}
VLOG("metric %lld created. bucket size %lld start_time: %lld", (long long)metric.id(),
diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.h b/cmds/statsd/src/metrics/GaugeMetricProducer.h
index 2a6401d..fdf8e61 100644
--- a/cmds/statsd/src/metrics/GaugeMetricProducer.h
+++ b/cmds/statsd/src/metrics/GaugeMetricProducer.h
@@ -86,9 +86,6 @@
// Util function to flush the old packet.
void flushIfNeededLocked(const uint64_t& eventTime);
- // The default bucket size for gauge metric is 1 hr.
- static const uint64_t kDefaultGaugemBucketSizeNs = 60ULL * 60 * 1000 * 1000 * 1000;
-
std::shared_ptr<StatsPullerManager> mStatsPullerManager;
// tagId for pulled data. -1 if this is not pulled
const int mPullTagId;
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
index 5f7d761..74bd6f9 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
@@ -61,8 +61,6 @@
const int FIELD_ID_END_BUCKET_NANOS = 2;
const int FIELD_ID_VALUE = 3;
-static const uint64_t kDefaultBucketSizeMillis = 60 * 60 * 1000L;
-
// ValueMetric has a minimum bucket size of 10min so that we don't pull too frequently
ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric& metric,
const int conditionIndex,
@@ -74,12 +72,14 @@
mStatsPullerManager(statsPullerManager),
mPullTagId(pullTagId) {
// TODO: valuemetric for pushed events may need unlimited bucket length
- if (metric.has_bucket() && metric.bucket().has_bucket_size_millis()) {
- mBucketSizeNs = metric.bucket().bucket_size_millis() * 1000 * 1000;
+ int64_t bucketSizeMills = 0;
+ if (metric.has_bucket()) {
+ bucketSizeMills = TimeUnitToBucketSizeInMillis(metric.bucket());
} else {
- mBucketSizeNs = kDefaultBucketSizeMillis * 1000 * 1000;
+ bucketSizeMills = TimeUnitToBucketSizeInMillis(ONE_HOUR);
}
+ mBucketSizeNs = bucketSizeMills * 1000000;
mDimensions = metric.dimensions();
if (metric.links().size() > 0) {
@@ -90,8 +90,7 @@
if (!metric.has_condition() && mPullTagId != -1) {
VLOG("Setting up periodic pulling for %d", mPullTagId);
- mStatsPullerManager->RegisterReceiver(mPullTagId, this,
- metric.bucket().bucket_size_millis());
+ mStatsPullerManager->RegisterReceiver(mPullTagId, this, bucketSizeMills);
}
VLOG("value metric %lld created. bucket size %lld start_time: %lld",
(long long)metric.id(), (long long)mBucketSizeNs, (long long)mStartTimeNs);