def params(cls, datasource, context): targetInfos = [] # add an id->contents map for each component/device for member in dotTraverse(context, datasource.targetMethod or '') or []: targetInfos.append(targetInfo(member)) targetArgValues = [] for datapoint in datasource.datapoints(): if isinstance(datapoint, AggregatingDataPoint): for att in getVarNames(datapoint.arguments.strip()): targetArgValues.append(dotTraverse(context, att)) else: log.error("datasource %s has a datapoint of the wrong type %s" % (datasource, datapoint)) # should be only datapoint, so ... break zDebug = context.getZ('zDatasourceDebugLogging') return dict( targetDatapoints = [(datasource.targetDataSource, datasource.targetDataPoint, datasource.targetRRA or 'AVERAGE')], targetArgValues=[tuple(targetArgValues)], targets=targetInfos, debug=datasource.debug or zDebug )
def getTargetCycleTime(self, context): """Return cycletime of basis datasources.""" for member in dotTraverse(context, self.targetMethod or '') or []: for template in member.getRRDTemplates(): datasource = template.datasources._getOb( self.targetDataSource, None) if datasource: if datasource.aqBaseHasAttr("getCycleTime"): return int(datasource.getCycleTime(member)) elif datasource.aqBaseHasAttr("cycletime"): return int(datasource.cycletime)
def params(cls, datasource, context): zDebug = context.getZ('zDatasourceDebugLogging') config = { 'targets': [targetInfo(context)], 'expression': datasource.expression, 'debug': datasource.debug or zDebug, 'template': datasource.rrdTemplate().getPrimaryId() } attrs = {} targetDataPoints = [] allDatapointsByVarName = {} for dp in context.getRRDDataPoints(): allDatapointsByVarName[dp.id] = dp allDatapointsByVarName[dp.name()] = dp for att in getVarNames(datasource.expression): if att in allDatapointsByVarName: datapoint = allDatapointsByVarName[att] targetDataPoints.append((datapoint.datasource().id, datapoint.id, 'AVERAGE')) else: value = dotTraverse(context, att) if not CalculatedDataSourcePlugin.isPicklable(value): log.error("Calculated Performance expression %s references " "invalid attribute (unpicklable value) %s" %(datasource.expression, att)) return config attrs[att] = value if value is None: log.warn( "Calculated Performance expression %s references " "the variable %s which is not in %s" % ( datasource.expression, att, allDatapointsByVarName.keys())) config['obj_attrs'] = attrs config['targetDatapoints'] = targetDataPoints return config
def params(cls, datasource, context): zDebug = context.getZ('zDatasourceDebugLogging') config = { 'expression': datasource.expression, 'debug': datasource.debug or zDebug, 'template': datasource.rrdTemplate().getPrimaryId()} attrs = {} targetDatapoints = {} # Keep track of all datapoints from all targets so we can avoid # looking for an attribute when we have found a datapoint by name on # an earlier target already. combinedDatapoints = {} # extraContents can contain paths to other objects that could have # metrics or attributes. allTargets = getExtraTargets(datasource.extraContexts, context) allTargets.append(context) # count down to the last target hasMore = len(allTargets) for target in allTargets: hasMore -= 1 allDatapointsByVarName = {} for dp in target.getRRDDataPoints(): allDatapointsByVarName[dp.id] = dp allDatapointsByVarName[dp.name()] = dp combinedDatapoints.update(allDatapointsByVarName) for att in getVarNames(datasource.expression): if att in allDatapointsByVarName: datapoint = allDatapointsByVarName[att] fqdpn = '%s_%s' % (datapoint.datasource().id, datapoint.id) targetDatapoints[fqdpn] = ( datapoint.datasource().id, datapoint.id, 'AVERAGE', datasource.targetAsRate, [targetInfo(target)]) elif att not in combinedDatapoints: value = dotTraverse(target, att) if not CalculatedDataSourcePlugin.isPicklable(value): LOG.error( "Calculated Performance expression %s references " "invalid attribute (unpicklable value) %s", datasource.expression, att) return config # Only store None if we finished and never found # a more interesting value. if value is not None: attrs[att] = value elif att not in attrs and not hasMore: attrs[att] = value LOG.warn( "Calculated Performance expression %s references " "the variable %s which is not in %s on the targets %s", datasource.expression, att, combinedDatapoints.keys(), allTargets) config['obj_attrs'] = attrs config['targetDatapoints'] = targetDatapoints.values() return config