diff options
| author | 2018-12-10 19:04:34 +0000 | |
|---|---|---|
| committer | 2018-12-10 19:04:34 +0000 | |
| commit | eb12479a079b105bf0c74c02f8d97392ace50b95 (patch) | |
| tree | aefb65d4dc275bd94e988ab843b042783df49593 | |
| parent | af4fcdcb9105b6848f0e14dc5e27e1ac662f6014 (diff) | |
| parent | b472291224a38e5a1354dd3e0487da684647668c (diff) | |
Merge "Always report the metric id even if the metric has no data to upload."
| -rw-r--r-- | cmds/statsd/src/metrics/CountMetricProducer.cpp | 7 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/DurationMetricProducer.cpp | 5 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/EventMetricProducer.cpp | 4 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/GaugeMetricProducer.cpp | 5 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/MetricProducer.h | 4 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/ValueMetricProducer.cpp | 5 | ||||
| -rw-r--r-- | cmds/statsd/src/stats_log.proto | 2 | ||||
| -rw-r--r-- | cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp | 6 | ||||
| -rw-r--r-- | cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp | 3 |
9 files changed, 33 insertions, 8 deletions
diff --git a/cmds/statsd/src/metrics/CountMetricProducer.cpp b/cmds/statsd/src/metrics/CountMetricProducer.cpp index 5ca88142f152..14f2de0b1a48 100644 --- a/cmds/statsd/src/metrics/CountMetricProducer.cpp +++ b/cmds/statsd/src/metrics/CountMetricProducer.cpp @@ -49,6 +49,8 @@ const int FIELD_ID_TIME_BASE = 9; const int FIELD_ID_BUCKET_SIZE = 10; const int FIELD_ID_DIMENSION_PATH_IN_WHAT = 11; const int FIELD_ID_DIMENSION_PATH_IN_CONDITION = 12; +const int FIELD_ID_IS_ACTIVE = 13; + // for CountMetricDataWrapper const int FIELD_ID_DATA = 1; // for CountMetricData @@ -151,10 +153,13 @@ void CountMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, } else { flushIfNeededLocked(dumpTimeNs); } + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_IS_ACTIVE, isActiveLocked()); + + if (mPastBuckets.empty()) { return; } - protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_TIME_BASE, (long long)mTimeBaseNs); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_BUCKET_SIZE, (long long)mBucketSizeNs); diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.cpp b/cmds/statsd/src/metrics/DurationMetricProducer.cpp index 35deffe5db97..7797bd98961d 100644 --- a/cmds/statsd/src/metrics/DurationMetricProducer.cpp +++ b/cmds/statsd/src/metrics/DurationMetricProducer.cpp @@ -48,6 +48,7 @@ const int FIELD_ID_TIME_BASE = 9; const int FIELD_ID_BUCKET_SIZE = 10; const int FIELD_ID_DIMENSION_PATH_IN_WHAT = 11; const int FIELD_ID_DIMENSION_PATH_IN_CONDITION = 12; +const int FIELD_ID_IS_ACTIVE = 13; // for DurationMetricDataWrapper const int FIELD_ID_DATA = 1; // for DurationMetricData @@ -461,12 +462,14 @@ void DurationMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, } else { flushIfNeededLocked(dumpTimeNs); } + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_IS_ACTIVE, isActiveLocked()); + if (mPastBuckets.empty()) { VLOG(" Duration metric, empty return"); return; } - protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_TIME_BASE, (long long)mTimeBaseNs); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_BUCKET_SIZE, (long long)mBucketSizeNs); diff --git a/cmds/statsd/src/metrics/EventMetricProducer.cpp b/cmds/statsd/src/metrics/EventMetricProducer.cpp index a18e406b74ca..31a4361f353d 100644 --- a/cmds/statsd/src/metrics/EventMetricProducer.cpp +++ b/cmds/statsd/src/metrics/EventMetricProducer.cpp @@ -44,6 +44,7 @@ namespace statsd { // for StatsLogReport const int FIELD_ID_ID = 1; const int FIELD_ID_EVENT_METRICS = 4; +const int FIELD_ID_IS_ACTIVE = 13; // for EventMetricDataWrapper const int FIELD_ID_DATA = 1; // for EventMetricData @@ -108,10 +109,11 @@ void EventMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, const bool erase_data, std::set<string> *str_set, ProtoOutputStream* protoOutput) { + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_IS_ACTIVE, isActiveLocked()); if (mProto->size() <= 0) { return; } - protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); size_t bufferSize = mProto->size(); VLOG("metric %lld dump report now... proto size: %zu ", diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp index 3a34743d55d6..03e42ce76460 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp @@ -49,6 +49,7 @@ const int FIELD_ID_TIME_BASE = 9; const int FIELD_ID_BUCKET_SIZE = 10; const int FIELD_ID_DIMENSION_PATH_IN_WHAT = 11; const int FIELD_ID_DIMENSION_PATH_IN_CONDITION = 12; +const int FIELD_ID_IS_ACTIVE = 13; // for GaugeMetricDataWrapper const int FIELD_ID_DATA = 1; const int FIELD_ID_SKIPPED = 2; @@ -192,11 +193,13 @@ void GaugeMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, flushIfNeededLocked(dumpTimeNs); } + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_IS_ACTIVE, isActiveLocked()); + if (mPastBuckets.empty()) { return; } - protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_TIME_BASE, (long long)mTimeBaseNs); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_BUCKET_SIZE, (long long)mBucketSizeNs); diff --git a/cmds/statsd/src/metrics/MetricProducer.h b/cmds/statsd/src/metrics/MetricProducer.h index 127cbbde1a3a..09e240929f08 100644 --- a/cmds/statsd/src/metrics/MetricProducer.h +++ b/cmds/statsd/src/metrics/MetricProducer.h @@ -223,6 +223,10 @@ protected: void activateLocked(int activationTrackerIndex, int64_t elapsedTimestampNs); + inline bool isActiveLocked() const { + return mIsActive; + } + /** * Flushes the current bucket if the eventTime is after the current bucket's end time. This will also flush the current partial bucket in memory. diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index bff23345a060..f25520be4749 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -52,6 +52,7 @@ const int FIELD_ID_TIME_BASE = 9; const int FIELD_ID_BUCKET_SIZE = 10; const int FIELD_ID_DIMENSION_PATH_IN_WHAT = 11; const int FIELD_ID_DIMENSION_PATH_IN_CONDITION = 12; +const int FIELD_ID_IS_ACTIVE = 13; // for ValueMetricDataWrapper const int FIELD_ID_DATA = 1; const int FIELD_ID_SKIPPED = 2; @@ -190,10 +191,12 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, } else { flushIfNeededLocked(dumpTimeNs); } + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_IS_ACTIVE, isActiveLocked()); + if (mPastBuckets.empty() && mSkippedBuckets.empty()) { return; } - protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)mMetricId); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_TIME_BASE, (long long)mTimeBaseNs); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_BUCKET_SIZE, (long long)mBucketSizeNs); // Fills the dimension path if not slicing by ALL. diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto index 32ee5af9ee21..a6f27c8aa535 100644 --- a/cmds/statsd/src/stats_log.proto +++ b/cmds/statsd/src/stats_log.proto @@ -219,6 +219,8 @@ message StatsLogReport { optional DimensionsValue dimensions_path_in_what = 11; optional DimensionsValue dimensions_path_in_condition = 12; + + optional bool is_active = 13; } message UidMapping { diff --git a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp index 2b0285b37473..370c36c75369 100644 --- a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp @@ -119,7 +119,8 @@ TEST(PartialBucketE2eTest, TestCountMetricWithoutSplit) { ConfigMetricsReport report = GetReports(service.mProcessor, start + 3); // Expect no metrics since the bucket has not finished yet. - EXPECT_EQ(0, report.metrics_size()); + EXPECT_EQ(1, report.metrics_size()); + EXPECT_EQ(0, report.metrics(0).count_metrics().data_size()); } TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp) { @@ -138,7 +139,8 @@ TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp) { service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get()); ConfigMetricsReport report = GetReports(service.mProcessor, start + 4); - EXPECT_EQ(0, report.metrics_size()); + EXPECT_EQ(1, report.metrics_size()); + EXPECT_EQ(0, report.metrics(0).count_metrics().data_size()); } TEST(PartialBucketE2eTest, TestCountMetricSplitOnUpgrade) { diff --git a/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp b/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp index 6d1317cb5dee..16be3d78f69b 100644 --- a/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp @@ -262,7 +262,8 @@ TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration1) // When using ProtoOutputStream, if nothing written to a sub msg, it won't be treated as // one. It was previsouly 1 because we had a fake onDumpReport which calls add_metric() by // itself. - EXPECT_EQ(0, reports.reports(0).metrics_size()); + EXPECT_EQ(1, reports.reports(0).metrics_size()); + EXPECT_EQ(0, reports.reports(0).metrics(0).duration_metrics().data_size()); } TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration2) { |