in cloudwatch_metrics_collector/src/metrics_collector.cpp [80:117]
int MetricsCollector::RecordMetrics(
const ros_monitoring_msgs::MetricList::ConstPtr & metric_list_msg)
{
int batched_count = 0;
AWS_LOGSTREAM_DEBUG(__func__, "Received " << metric_list_msg->metrics.size() << " metrics");
for (auto metric_msg = metric_list_msg->metrics.begin();
metric_msg != metric_list_msg->metrics.end(); ++metric_msg) {
std::map<std::string, std::string> dimensions;
for (auto & default_dimension : default_dimensions_) {
dimensions.emplace(default_dimension.first, default_dimension.second); // ignore the return, if we get a duplicate we're
// going to stick with the first one
}
for (const auto & dimension : metric_msg->dimensions) {
dimensions.emplace(dimension.name, dimension.value); // ignore the return, if we get a duplicate
// we're going to stick with the first one
}
AWS_LOGSTREAM_DEBUG(__func__, "Recording metric with name=[" << metric_msg->metric_name << "]");
// create a MetricObject with message parameters to batch
Aws::CloudWatchMetrics::Utils::MetricObject metric_object {metric_msg->metric_name,
metric_msg->value,
metric_msg->unit,
GetMetricDataEpochMillis(*metric_msg),
dimensions,
this->storage_resolution_.load()};
bool batched = metric_service_->batchData(metric_object);
if (!batched) {
AWS_LOGSTREAM_ERROR(__func__, "Failed to record metric");
}
batched_count++;
}
return batched_count;
}