Dateityp formatierung in eigenem Checkplugin nicht möglich

Hallo CheckMK Community,

ich brauche Hilfe bzgl. einem eigenen Check, es besteht folgendes Problem:
Auf einem Linux Host habe ich ein Agenten-Plugin geschrieben, das mir mehrere Zahlen ausgibt.
Bei diesen Zahlen handelt es sich teilweise um Sekunden und teilweise um Dateigrößen in bytes.
Bei zwei dieser Zahlen habe ich jedoch das Problem, dass ich sie in einer if Bedingung nicht verwerten kann.
Nach längerem testen konnte ich das Problem etwas eingrenzen, es sieht so aus, als ob die Formatierung zum Integer Dateityp nicht klappt.
Hier mein Check Plugin:

def inventory_***(info):
    yield None, None

def check_***(_no_item, _no_params, info):
    for line in info:
        backlogTime = line[0].rstrip("microseconds")
        backlogSize = line[1].rstrip("bytes")
        logTime = line[2]
        logTimeStamp = line[3]
        int(backlogTime)
        int(backlogSize)
		int(logTime)
		int(logTimeStamp)
		
    if  backlogTime < 11 and backlogSize < 11 and logTime < 21 and logTimeStamp < 21:    
	    return 0, "OK"
		
check_info["***"] = {
    'check_function':            check_***,
    'inventory_function':        inventory_***,
    'service_description':       'Description'
    }

(Das Plugin ist so natürlich noch nicht fertig)

Wenn ich “logTime” und “logTimeStamp” aus der if Bedingung entferne funktioniert es.
Laut print type sind alle Variablen vom Typ unicode (selbst nach dem Umwandeln mit int()?). Wenn ich sie vor dem Umwandeln auf Integer auf z.B. UTF-8 enkodiere macht er mir die Umwandlung zum int nicht und die Variablen bleiben beim String Dateityp.
Was mache ich falsch bzw. was muss ich noch machen damit ich mit den beiden Variablen in der if Bedingung arbeiten kann?
Falls es hilft die Ausgabe des Agenten sieht so aus:

[[u’0microseconds’, u’0bytes’, u’23’, u’23’]]

Falls ihr noch weitere Infos braucht lasst es mich bitte wissen.

Schonmal im Voraus danke für die Hilfe.

    backlogTime = line[0].rstrip("microseconds")
    [...]
    int(backlogTime)

In der ersten Zeile weißt du der variable “backlogTime” tatsächlich einen neuen Wert zu (den aus line[0])
in der zweiten rufst du jedoch nur die Funktion “int” mit backlogTime als Parameter auf, speicherst aber den Rückgabewert nirgends. somit bleibt backlogTime ein String.

Führe es doch einfach zusammen zu:

    backlogSize = int(line[1].rstrip("bytes"))

zumindest wenn du dir sicher bist, dass dein Checkplugin an der Stelle immer einen gültigen Integer zurückliefert

3 Likes

Hallo Gerd,

Vielen Dank für die schnelle Rückmeldung. Hat funktioniert, mein Fehler war, wie du schon gesagt hast, dass ich die Variable mit int() aufrufe aber dann in keine neue Variable speichere. Dass ich den Befehl so zusammenführen kann wusste ich leider nicht.

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed. Contact an admin if you think this should be re-opened.