| Current File : //proc/3/task/3/root/etc/node_exporter/scripts/adaptec |
#!/usr/bin/env python
from subprocess import check_output, CalledProcessError
import os
def run(command):
commands = command.split()
try:
res = check_output(commands, stderr=open(os.devnull, 'wb'))
return res
except CalledProcessError as e:
return False
def col_value(data, key, index=0):
col_index = 0
for line in data.splitlines():
columns = line.split(' : ')
col_num = len(columns)
col_key = columns[0].strip()
if col_key == key:
if col_index == index:
if col_num == 2:
return columns[1].strip()
elif col_num == 3:
return columns[1].strip() + ' ' + columns[2].strip()
col_index += 1
return False
def last_value(data, key, index=0):
col_index = 0
for line in data.splitlines():
if key in line:
if col_index == index:
return line.split()[-1]
return False
def print_formated(metric, value, index=-1, isString=False):
if index != -1:
if not isString:
print('adaptec_%s{device="%s"} %s' % (metric,index,value))
else:
if value == "Online" or value == "Optimal":
value = 1
print('adaptec_%s{device="%s"} %s' % (metric,index,value))
elif ' ' in value:
splited = value.split(" ")
print('adaptec_%s{device="%s"} %s' % (metric,index,value))
else:
value = 0
print('adaptec_%s{device="%s"} %s' % (metric,index,value))
else:
if not isString:
print('adaptec_%s %s' % (metric,value))
else:
if value == "Online" or value == "Optimal":
value = 1
print('adaptec_%s %s' % (metric,value))
elif ' ' in value:
splited = value.split(" ")
if isinstance(splited[0], int):
print('adaptec_%s %s' % (metric,splited[0]))
else:
print('adaptec_%s %s' % (metric,0))
else:
value = 0
print('adaptec_%s %s' % (metric,value))
command = '/usr/Arcconf/arcconf GETCONFIG 1'
res = run(command)
controller_status = col_value(res, 'Controller Status')
print_formated('controller_status',controller_status,-1,True)
raid_status = col_value(res, 'Status of Logical Device')
print_formated('raid_status',raid_status,-1,True)
temperature = col_value(res, 'Temperature')
print_formated('controller_temperature',temperature,-1,True)
health = col_value(res, 'Health')
print_formated('controller_battery_health',health,-1,True)
for pd_num in range(10): # 0-9
if col_value(res, 'State', pd_num):
state = col_value(res, 'State', pd_num)
print_formated('state',state,pd_num,True)
smart_warnings = col_value(res, 'S.M.A.R.T. warnings', pd_num)
print_formated('smart_warnings',smart_warnings,pd_num,False)
hardware_error_count = col_value(res, 'Hardware Error Count', pd_num)
print_formated('hardware_error_count',hardware_error_count,pd_num,False)
medium_error_count = col_value(res, 'Medium Error Count', pd_num)
print_formated('medium_error_count',medium_error_count,pd_num,False)
parity_error_count = col_value(res, 'Parity Error Count', pd_num)
print_formated('parity_error_count',parity_error_count,pd_num,False)
link_failure_count = col_value(res, 'Link Failure Count', pd_num)
print_formated('link_failure_count',link_failure_count,pd_num,False)
abort_command_count = col_value(res, 'Aborted Command Count', pd_num)
print_formated('abort_command_count',abort_command_count,pd_num,False)
smart_warning_count = col_value(res, 'SMART Warning Count', pd_num)
print_formated('smart_warning_count',smart_warning_count,pd_num,False)