CloudWatchMetricsStatus CloudWatchMetricsFacade::SendMetricsToCloudWatch()

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;
}