Moin Moin,
ich habe gerade für einen AT Satellite einen Server bei einem anderen Anbieter gebucht, welcher scheinbar einen schlankeren Kernel verwendet und somit der CPU Check Failed weil wicht alle Linux-Kernel liefern alle Felder! Bei älteren oder schlankeren Kerneln fehlen oft steal, guest, und guest_nice. Dann hat die Zeile weniger Werte. Wenn du dann auf values[8] zugreifst, crasht das Skript.
Ich hab dazu mal die Funktion get_cpu_stat so angepasst, dass sie zuerst prüft, wie viele Felder überhaupt da sind. Wenn ein Feld fehlt, setze es einfach auf 0.
Code
def get_cpu_stat(filename, test=None):
lines = check.get_file_content(filename)
stats = {
"user": 0,
"nice": 0,
"system": 0,
"idle": 0,
"iowait": 0,
"irq": 0,
"softirq": 0,
"steal": 0,
"quest": 0
}
for line in lines:
line = line.rstrip()
match = re.search(r"^cpu\s+(.+)", line)
if match:
values = re.split(r"\s+", match.group(1))
# defensive programming: Werte nach Anzahl Felder setzen
try:
stats["user"] = int(values[0]) if len(values) > 0 else 0
stats["nice"] = int(values[1]) if len(values) > 1 else 0
stats["system"] = int(values[2]) if len(values) > 2 else 0
stats["idle"] = int(values[3]) if len(values) > 3 else 0
stats["iowait"] = int(values[4]) if len(values) > 4 else 0
stats["irq"] = int(values[5]) if len(values) > 5 else 0
stats["softirq"] = int(values[6]) if len(values) > 6 else 0
stats["steal"] = int(values[7]) if len(values) > 7 else 0
stats["quest"] = int(values[8]) if len(values) > 8 else 0
except Exception as e:
# Bei Fehler alles auf 0 lassen (oder Logging)
pass
break
return stats
Display More
Vielleicht solltest du, um es noch robuster zu machen, es auch so umsetzen?
Viele Grüße!