in src/worker/exporters/node_exporter.py [0:0]
def handle_field(self, field_name, value): # noqa: C901
'''Update metric value for gauge'''
if 'cpu' in field_name:
logging.debug(f'Handeling field: {field_name}')
for id, k in enumerate(value.keys()):
numa_domain = self.config['cpu_numa_map'][id]
logging.debug(f'Handeling key: {k}. Setting value: {value[k]}')
self.update_field(field_name, value[k], self.config['job_id'], k, numa_domain)
elif 'xid' in field_name or 'link_flap' in field_name:
Mapping = GPU_Mapping if 'xid' in field_name else IB_Mapping
try:
self.remove_metric(field_name, Mapping)
for dev_id in value.keys():
iter_object = value[dev_id].keys() if field_name == 'xid' else value[dev_id]
for time_stamp in iter_object:
label_values = [self.config['job_id'], dev_id, Mapping[dev_id], time_stamp] \
if 'xid' in field_name else [self.config['job_id'], Mapping[dev_id], time_stamp]
collect_time = self.config['sample_timestamp'][field_name]
event_time = datetime.strptime(time_stamp, "%b %d %H:%M:%S").replace(year=collect_time.year)
if event_time <= collect_time:
continue
if 'xid' in field_name:
for code in value[dev_id][time_stamp]:
self.update_field(field_name, code, *label_values)
else:
self.update_field(field_name, 1, *label_values)
self.config['counter'][field_name][dev_id].append(time_stamp)
self.config['sample_timestamp'][field_name] = event_time
except Exception as e:
logging.exception('Raised exception during xid/linkflap handling. Message: %s', e)
pass
else:
self.update_field(field_name, value, self.config['job_id'])
logging.debug('Node exporter field %s: %s', field_name, str(value))