62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
import subprocess
|
|
|
|
def convertToDict(RAS_dump):
|
|
ras_status = {}
|
|
current_driver = ""
|
|
lines = RAS_dump.split('\n')
|
|
|
|
for line in lines:
|
|
if line == '':
|
|
continue
|
|
if '\t' in line:
|
|
try:
|
|
item = line.split(': ')
|
|
ras_status[current_driver][item[1]] = {}
|
|
if "Corrected" in line:
|
|
ras_status[current_driver][item[1]]["corrected"] = int(line.replace('\t', '').split(' ')[0])
|
|
ras_status[current_driver]["total_errors"] += int(line.replace('\t', '').split(' ')[0])
|
|
else:
|
|
ras_status[current_driver][item[1]]["uncorrected"] = int(line.replace('\t', '').split(' ')[0])
|
|
ras_status[current_driver]["total_errors"] += int(line.replace('\t', '').split(' ')[0])
|
|
except:
|
|
item = line.replace('\t', '').split(' ')
|
|
ras_status[current_driver][item[0]] = {}
|
|
ras_status[current_driver][item[0]]["uncorrected"] = int(line.replace('\t', '').split(' ')[2])
|
|
ras_status[current_driver]["total_errors"] += int(line.replace('\t', '').split(' ')[2])
|
|
else:
|
|
current_driver = ""
|
|
if "No" in line:
|
|
words = line.split(' ')
|
|
for word in words:
|
|
if word == "No":
|
|
continue
|
|
if "errors" in word:
|
|
current_driver = current_driver[:-1]
|
|
break
|
|
current_driver += word+" "
|
|
else:
|
|
words = line.split(' ')
|
|
for word in words:
|
|
if word == "events":
|
|
current_driver = current_driver[:-1]
|
|
break
|
|
if "errors" in word:
|
|
current_driver = current_driver[:-1]
|
|
break
|
|
current_driver += word+" "
|
|
ras_status[current_driver] = {}
|
|
ras_status[current_driver]["total_errors"] = 0
|
|
|
|
return ras_status
|
|
|
|
def readRAS():
|
|
result = subprocess.run(['ras-mc-ctl', '--summary'], stdout=subprocess.PIPE)
|
|
result = result.stdout.decode('utf-8')
|
|
|
|
return convertToDict(result)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(readRAS())
|