106 lines
2.2 KiB
Python
106 lines
2.2 KiB
Python
class implementation_check_kind_generic_remote(interface_check_kind):
|
|
|
|
'''
|
|
[implementation]
|
|
'''
|
|
def parameters_schema(self):
|
|
return {
|
|
"type": "object",
|
|
"additionalProperties": False,
|
|
"properties": {
|
|
"host" : {
|
|
"type" : "string"
|
|
},
|
|
"user" : {
|
|
"type" : "string"
|
|
},
|
|
"ssh_key" : {
|
|
"type" : "string"
|
|
},
|
|
"mount_point" : {
|
|
"type" : "string",
|
|
"default" : "/"
|
|
},
|
|
"threshold" : {
|
|
"type" : "integer",
|
|
"default" : 95,
|
|
"description" : "maximaler Füllstand in Prozent"
|
|
},
|
|
"strict" : {
|
|
"type" : "boolean",
|
|
"default" : False
|
|
}
|
|
},
|
|
"required": [
|
|
"host", "user", "ssh_key"
|
|
]
|
|
}
|
|
|
|
|
|
'''
|
|
[implementation]
|
|
'''
|
|
def normalize_conf_node(self, node):
|
|
if not "host" in node \
|
|
or not "user" in node \
|
|
or not "ssh_key" in node:
|
|
raise ValueError("MISSING STUFF!")
|
|
if not "mount_point" in node:
|
|
node["mount_point"] = "/"
|
|
if not "threshold" in node:
|
|
node["threshold"] = 95
|
|
if not "strict" in node:
|
|
node["strict"] = "/"
|
|
|
|
return node
|
|
|
|
'''
|
|
[implementation]
|
|
'''
|
|
def run(self, parameters):
|
|
SSH_COMMAND=string_coin("ssh -i {{ssh_key}} {{user}}@{{host}} \"df {{mount_point}} | tr -s ' '\"", parameters)
|
|
|
|
retval=shell_command(SSH_COMMAND)
|
|
|
|
if retval["return_code"] > 0:
|
|
return {
|
|
"condition" : enum_condition.unknown,
|
|
"info" : {
|
|
"error" : retval["stderr"]
|
|
}
|
|
}
|
|
else:
|
|
parts=retval["stdout"].split("\n")[-1].split(" ")
|
|
ret={
|
|
"device" : parts[0],
|
|
"used" : parts[2],
|
|
"avail" : parts[3],
|
|
"perc" : int(parts[4][:-1])
|
|
}
|
|
|
|
if ret["perc"] > parameters["threshold"]:
|
|
return {
|
|
"condition": (
|
|
enum_condition.critical
|
|
if parameters["strict"] else
|
|
enum_condition.warning
|
|
),
|
|
"info": {
|
|
"mount_point": parameters["mount_point"],
|
|
"device": ret["device"],
|
|
"used": ret["used"], # ToDo: Humanlesbarkeit herstellen
|
|
"available": ret["avail"], # ToDo: Humanlesbarkeit herstellen
|
|
"percentage": str(ret["perc"]) + "%",
|
|
"host" : parameters["host"],
|
|
"faults": [
|
|
translation_get("checks.generic_remote.overflow")
|
|
]
|
|
}
|
|
}
|
|
|
|
else:
|
|
return {
|
|
"condition": enum_condition.ok,
|
|
"info" : {}
|
|
}
|