def getAggregationFn(metric):
  fn = None

  slaveDatasource = AutostackMetricAdapterBase.getMetricDatasource(metric)
  metricAdapter = AutostackMetricAdapterBase.getMetricAdapter(slaveDatasource)
  query = metricAdapter.getQueryParams(metric.name)

  if "statistics" in query and query["statistics"] == "Sum":
    fn = sum

  return fn
Exemple #2
0
    def _createMetricDataCollectionTasks(cls, requests, instanceCache):
        """ Create tasks to be executed concurrently from the given collection
    requests.

    :param requests: Metric collection requests
    :type requests: A sequence of AutostackMetricRequest objects

    :param instanceCache: Autostack instance cache. All Autostacks referenced in
                          requests are expected to be present in instance cache
    :type instanceCache: a dict, where each key is an Autostack uid and the
                         corresponding value is an _InstanceCacheValue object

    :returns: data collection tasks and request
        refID-to-_MetricCollectionAccumulator mappings
    :rtype: A two-tuple:
        The first element is a sequence of _MetricCollectionTask objects with
        refID values from the corresponding AutostackMetricRequest objects;
        The second elment is a dict of the
        refID-to-_MetricCollectionAccumulator mappings. The refID values are the
        ones provided by user in the corresponding AutostackMetricRequest
        objects.
    """
        accumulatorMap = dict()
        tasks = []
        for request in requests:
            refID = request.refID
            autostack = request.autostack
            metric = request.metric
            period = metric.poll_interval
            slaveDatasource = AutostackMetricAdapterBase.getMetricDatasource(
                metric)

            if slaveDatasource == "autostacks":
                timeRange = cls._getMetricCollectionTimeSliceForAutostackMetric(
                    period=period)
            else:
                timeRange = cls._getMetricCollectionTimeSlice(
                    startTime=metric.last_timestamp, period=period)

            instanceCacheItem = instanceCache[autostack.uid]

            region = autostack.region

            metricAdapter = AutostackMetricAdapterBase.getMetricAdapter(
                slaveDatasource)
            queryParams = metricAdapter.getQueryParams(metric.name)
            metricName = metric.name.split("/")[-1]
            stats = queryParams["statistics"]
            unit = queryParams["unit"]

            # Generate metric data collection tasks for the current request
            for instance in instanceCacheItem.instances:
                # instance is an aggregator_instances.InstanceInfo object
                task = _MetricCollectionTask(refID=refID,
                                             metricID=metric.uid,
                                             region=region,
                                             instanceID=instance.instanceID,
                                             metricName=metricName,
                                             stats=stats,
                                             unit=unit,
                                             period=period,
                                             timeRange=timeRange)

                tasks.append(task)

            # Create the metric collection accumulator for the current request
            assert refID not in accumulatorMap
            accumulatorMap[refID] = _MetricCollectionAccumulator(
                expectedNumSlices=len(instanceCacheItem.instances),
                collection=MetricCollection(refID=refID,
                                            slices=[],
                                            timeRange=timeRange,
                                            nextMetricTime=timeRange.end))

        return tasks, accumulatorMap
    def _createMetricDataCollectionTasks(cls, requests, instanceCache):
        """ Create tasks to be executed concurrently from the given collection
    requests.

    :param requests: Metric collection requests
    :type requests: A sequence of AutostackMetricRequest objects

    :param instanceCache: Autostack instance cache. All Autostacks referenced in
                          requests are expected to be present in instance cache
    :type instanceCache: a dict, where each key is an Autostack uid and the
                         corresponding value is an _InstanceCacheValue object

    :returns: data collection tasks and request
        refID-to-_MetricCollectionAccumulator mappings
    :rtype: A two-tuple:
        The first element is a sequence of _MetricCollectionTask objects with
        refID values from the corresponding AutostackMetricRequest objects;
        The second elment is a dict of the
        refID-to-_MetricCollectionAccumulator mappings. The refID values are the
        ones provided by user in the corresponding AutostackMetricRequest
        objects.
    """
        accumulatorMap = dict()
        tasks = []
        for request in requests:
            refID = request.refID
            autostack = request.autostack
            metric = request.metric
            period = metric.poll_interval
            slaveDatasource = AutostackMetricAdapterBase.getMetricDatasource(metric)

            if slaveDatasource == "autostacks":
                timeRange = cls._getMetricCollectionTimeSliceForAutostackMetric(period=period)
            else:
                timeRange = cls._getMetricCollectionTimeSlice(startTime=metric.last_timestamp, period=period)

            instanceCacheItem = instanceCache[autostack.uid]

            region = autostack.region

            metricAdapter = AutostackMetricAdapterBase.getMetricAdapter(slaveDatasource)
            queryParams = metricAdapter.getQueryParams(metric.name)
            metricName = metric.name.split("/")[-1]
            stats = queryParams["statistics"]
            unit = queryParams["unit"]

            # Generate metric data collection tasks for the current request
            for instance in instanceCacheItem.instances:
                # instance is an aggregator_instances.InstanceInfo object
                task = _MetricCollectionTask(
                    refID=refID,
                    metricID=metric.uid,
                    region=region,
                    instanceID=instance.instanceID,
                    metricName=metricName,
                    stats=stats,
                    unit=unit,
                    period=period,
                    timeRange=timeRange,
                )

                tasks.append(task)

            # Create the metric collection accumulator for the current request
            assert refID not in accumulatorMap
            accumulatorMap[refID] = _MetricCollectionAccumulator(
                expectedNumSlices=len(instanceCacheItem.instances),
                collection=MetricCollection(refID=refID, slices=[], timeRange=timeRange, nextMetricTime=timeRange.end),
            )

        return tasks, accumulatorMap