in cloudwatch_metrics_common/src/utils/cloudwatch_metrics_facade.cpp [75:111]
CloudWatchMetricsStatus CloudWatchMetricsFacade::SendMetricsToCloudWatch(
const std::string & metric_namespace, MetricDatumCollection &metrics)
{
auto status = SUCCESS;
Aws::CloudWatch::Model::PutMetricDataRequest request;
Aws::Vector<Aws::CloudWatch::Model::MetricDatum> datums;
if (metrics.empty()) {
AWS_LOGSTREAM_DEBUG( __func__, "CloudWatchMetricsFacade: no metrics to send");
return FAILURE;
}
request.SetNamespace(metric_namespace.c_str());
// Note: this fails an entire set of metrics, even if some are sent back successfully
for (auto & metric : metrics) {
datums.push_back(metric);
if (datums.size() >= MAX_METRIC_DATUMS_PER_REQUEST) {
request.SetMetricData(datums);
status = SendMetricsRequest(request);
// if offline don't attempt to send again (fail fast)
if (status == NETWORK_FAILURE) {
return status;
}
datums.clear();
}
}
if (datums.size() > 0) {
request.SetMetricData(datums);
status = SendMetricsRequest(request);
}
return status;
}