summaryrefslogtreecommitdiff
path: root/statsd/src/metrics/EventMetricProducer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'statsd/src/metrics/EventMetricProducer.cpp')
-rw-r--r--statsd/src/metrics/EventMetricProducer.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/statsd/src/metrics/EventMetricProducer.cpp b/statsd/src/metrics/EventMetricProducer.cpp
index a8f45391..648e21c9 100644
--- a/statsd/src/metrics/EventMetricProducer.cpp
+++ b/statsd/src/metrics/EventMetricProducer.cpp
@@ -49,6 +49,8 @@ const int FIELD_ID_ID = 1;
const int FIELD_ID_EVENT_METRICS = 4;
const int FIELD_ID_IS_ACTIVE = 14;
const int FIELD_ID_ESTIMATED_MEMORY_BYTES = 18;
+const int FIELD_ID_DATA_CORRUPTED_REASON = 19;
+
// for EventMetricDataWrapper
const int FIELD_ID_DATA = 1;
// for EventMetricData
@@ -138,6 +140,8 @@ optional<InvalidConfigReason> EventMetricProducer::onConfigUpdatedLocked(
void EventMetricProducer::dropDataLocked(const int64_t dropTimeNs) {
mAggregatedAtoms.clear();
mTotalSize = 0;
+ mDataCorruptedDueToSocketLoss = false;
+ mDataCorruptedDueToQueueOverflow = false;
StatsdStats::getInstance().noteBucketDropped(mMetricId);
}
@@ -165,6 +169,8 @@ std::unique_ptr<std::vector<uint8_t>> serializeProtoLocked(ProtoOutputStream& pr
void EventMetricProducer::clearPastBucketsLocked(const int64_t dumpTimeNs) {
mAggregatedAtoms.clear();
mTotalSize = 0;
+ mDataCorruptedDueToSocketLoss = false;
+ mDataCorruptedDueToQueueOverflow = false;
}
void EventMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs,
@@ -177,6 +183,9 @@ void EventMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs,
protoOutput->write(FIELD_TYPE_BOOL | FIELD_ID_IS_ACTIVE, isActiveLocked());
protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_ESTIMATED_MEMORY_BYTES,
(long long)byteSizeLocked());
+ // Data corrupted reason
+ writeDataCorruptedReasons(*protoOutput, FIELD_ID_DATA_CORRUPTED_REASON,
+ mDataCorruptedDueToQueueOverflow, mDataCorruptedDueToSocketLoss);
uint64_t protoToken = protoOutput->start(FIELD_TYPE_MESSAGE | FIELD_ID_EVENT_METRICS);
for (const auto& [atomDimensionKey, elapsedTimestampsNs] : mAggregatedAtoms) {
@@ -197,10 +206,13 @@ void EventMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs,
protoOutput->end(aggregatedToken);
protoOutput->end(wrapperToken);
}
+
protoOutput->end(protoToken);
if (erase_data) {
mAggregatedAtoms.clear();
mTotalSize = 0;
+ mDataCorruptedDueToSocketLoss = false;
+ mDataCorruptedDueToQueueOverflow = false;
}
}