in aws/kinesis/core/retrier.cc [262:304]
void Retrier::emit_metrics(const std::shared_ptr<UserRecord>& ur) {
using aws::metrics::constants::Names;
assert(ur->attempts().size() > 0);
bool successful = ur->attempts().back();
std::string shard_id;
if (successful) {
shard_id = ur->attempts().back().shard_id();
} else if (ur->predicted_shard()) {
shard_id = ShardMap::shard_id_to_str(*ur->predicted_shard());
}
auto put = [&](auto name, auto val) {
auto f = metrics_manager_->finder().set_name(name)
.set_stream(ur->stream());
if (!shard_id.empty()) {
f.set_shard(shard_id);
}
f.find()->put(val);
};
if (successful) {
put(Names::UserRecordsPut, 1);
put(Names::UserRecordsDataPut, ur->data().length());
} else {
put(Names::UserRecordsPut, 0);
if (ur->attempts().back().error_code() == "Expired") {
put(Names::UserRecordExpired, 1);
}
}
auto last = ur->arrival();
for (auto& a : ur->attempts()) {
put(Names::BufferingTime,
std::chrono::duration_cast<std::chrono::milliseconds>(
a.start() - last).count());
last = a.end();
}
put(Names::RetriesPerRecord, ur->attempts().size() - 1);
}