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