in src/cloudwatch/modules/flusher.py [0:0]
def _aggregate_metric(self, value_list):
"""
Selects existing metric or adds a new metric to the metric_map. Then aggregates values from ValueList with the selected metric.
If the size of metric_map is above the limit, new metric will not be added and the value_list will be dropped.
"""
nan_value_count = 0
dimension_key = self._get_metric_key(value_list)
adjusted_time = int(value_list.time)
key = dimension_key
if self.enable_high_resolution_metrics:
key = dimension_key + "-" + str(adjusted_time)
if key in self.metric_map:
nan_value_count = self._add_values_to_metrics(self.metric_map[key], value_list)
else:
if len(self.metric_map) < self.max_metrics_to_aggregate:
nan_value_count = self._add_metric_to_queue(value_list, adjusted_time, key)
else:
if self.enable_high_resolution_metrics:
if self.config.debug and self.metric_map:
state = ""
for dimension_metrics in self.metric_map:
state += str(dimension_metrics) + "[" + str(self.metric_map[dimension_metrics][0].statistics.sample_count) + "] "
self._LOGGER.info("[debug] flushing metrics " + state)
self._flush()
nan_value_count = self._add_metric_to_queue(value_list, adjusted_time, key)
else:
self._LOGGER.warning("Batching queue overflow detected. Dropping metric.")
if nan_value_count:
self.record_nan_value(dimension_key, value_list)