def _aggregate_metric()

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)