in src/worker/exporters/node_exporter.py [0:0]
def collect(self, field_name): # noqa: C901
'''Custom collection Method'''
value = None
if 'net' in field_name:
cmd = "grep '{}' ".format(config['ethernet_device']) + self.config['fieldFiles'][field_name]
val = None
if 'net_rx' in field_name:
val = shell_cmd(cmd, 5).split()[1]
else: # 'net_tx'
val = shell_cmd(cmd, 5).split()[9]
delta = int(val) - int(self.config['counter'][field_name])
self.config['counter'][field_name] = val
value = delta / (self.config['update_freq']) # bandwidth
elif 'cpu' in field_name:
value = {}
if 'util' in field_name:
for id, util_percent in enumerate(
psutil.cpu_percent(percpu=True)):
value[str(id)] = util_percent
elif 'frequency' in field_name:
for id, freq in enumerate(psutil.cpu_freq(percpu=True)):
value[str(id)] = freq.current
elif 'mem' in field_name:
metric = field_name.split('_')[-1]
virtual_mem = psutil.virtual_memory()
if metric == 'util':
value = getattr(virtual_mem, 'percent')
else:
# psutil returns virtual memory stats in bytes, convert to kB
value = getattr(virtual_mem, metric) / 1024
elif 'xid' in field_name or "link_flap" in field_name:
try:
value = {}
cmd = self.config['command'][field_name]
# check if error present in logs
field_check = shell_cmd(cmd, 5)
result = [line for line in field_check.split(
'\n') if line.strip() != '']
for line in result:
timestamp = re.search(
r"\w\w\w\s+\d+\s\d\d:\d\d:\d\d", line)
if not timestamp:
continue
timestamp = timestamp.group()
if 'xid' in field_name:
results = re.search(r"\(.+\):\s\d\d", line)
if not results:
continue
results = results.group().split()
pci = results[0].replace('(PCI:', '').replace('):', '')[-10:]
if pci not in value:
value = {pci: {timestamp: []}}
if timestamp not in value[pci]:
value[pci][timestamp] = []
value[pci][timestamp].append(int(results[1].replace(',', '')))
else: # link flap
results = re.search(r"\bib\d:", line)
if not results:
continue
hca = results.group().replace(':', '')
if hca not in value:
value[hca] = []
value[hca].append(timestamp)
except Exception as e:
logging.exception('Exception occured during collection. Message: %s', e)
pass
else:
value = 0
return value