Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
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
Ejemplo n.º 4
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