def CustomDataHandler(self, fvs): value = collectd.Values(type='gauge') # pylint: disable=no-member value.plugin = 'dcgm_collectd' for gpuId in fvs.keys(): gpuFv = fvs[gpuId] uuid = self.m_gpuIdToUUId[gpuId] value.plugin_instance = '%s' % (uuid) typeInstance = str(gpuId) for fieldId in gpuFv.keys(): # Skip ignore list if fieldId in self.m_dcgmIgnoreFields: continue fieldTag = self.m_fieldIdToInfo[fieldId].tag val = gpuFv[fieldId][-1] #Skip blank values. Otherwise, we'd have to insert a placeholder blank value based on the fieldId if val.isBlank: continue valTimeSec1970 = (val.ts / 1000000) #Round down to 1-second for now valueArray = [val.value, ] value.dispatch(type=fieldTag, type_instance=typeInstance, time=valTimeSec1970, values=valueArray, plugin=value.plugin) collectd.debug("gpuId %d, tag %s, value %s" % (gpuId, fieldTag, str(val.value))) # pylint: disable=no-member
def __init__(self): global c_ONE_SEC_IN_USEC collectd.debug( 'Initializing DCGM with interval={}s'.format(g_intervalSec)) DcgmReader.__init__(self, fieldIds=g_publishFieldIds, ignoreList=g_dcgmIgnoreFields, fieldGroupName='collectd_plugin', updateFrequency=g_intervalSec * c_ONE_SEC_IN_USEC, fieldIntervalMap=g_fieldIntervalMap)
def CustomDataHandler(self, fvs): global c_ONE_SEC_IN_USEC value = collectd.Values(type='gauge') # pylint: disable=no-member value.plugin = 'dcgm_collectd' for gpuId in list(fvs.keys()): gpuFv = fvs[gpuId] uuid = self.m_gpuIdToUUId[gpuId] collectd.debug('CustomDataHandler uuid: ' + '%s' % (uuid) + '\n') value.plugin_instance = '%s' % (uuid) typeInstance = str(gpuId) for fieldId in list(gpuFv.keys()): # Skip ignore list if fieldId in self.m_dcgmIgnoreFields: continue fieldTag = self.m_fieldIdToInfo[fieldId].tag lastValTime = float("inf") # Filter out times too close together (< 1.0 sec) but always # include latest one. for val in gpuFv[fieldId][::-1]: # Skip blank values. Otherwise, we'd have to insert a placeholder blank value based on the fieldId if val.isBlank: continue valTimeSec1970 = (val.ts / c_ONE_SEC_IN_USEC ) #Round down to 1-second for now if (lastValTime - valTimeSec1970) < 1.0: collectd.debug( "DCGM sample for field ID %d too soon at %f, last one sampled at %f" % (fieldId, valTimeSec1970, lastValTime)) val.isBlank = True # Filter this one out continue lastValTime = valTimeSec1970 i = 0 for val in gpuFv[fieldId]: # Skip blank values. Otherwise, we'd have to insert a placeholder blank value based on the fieldId if val.isBlank: continue # Round down to 1-second for now valTimeSec1970 = (val.ts / c_ONE_SEC_IN_USEC) valueArray = [ val.value, ] value.dispatch(type=fieldTag, type_instance=typeInstance, time=valTimeSec1970, values=valueArray, plugin=value.plugin) collectd.debug( " gpuId %d, tag %s, sample %d, value %s, time %s" % (gpuId, fieldTag, i, str(val.value), str(val.ts))) # pylint: disable=no-member i += 1
def __init__(self): collectd.debug('Initializing DCGM with interval={}s'.format(g_intervalSec)) DcgmReader.__init__(self, fieldIds=g_publishFieldIds, ignoreList=g_dcgmIgnoreFields, fieldGroupName='collectd_plugin', updateFrequency=g_intervalSec*1000000)