mirror of
https://github.com/drewkerrigan/nagios-http-json.git
synced 2025-05-10 09:53:44 +02:00
Update check_http_json.py
Patch to solve Issue 93 for -c and -w arguments.
This commit is contained in:
parent
5c4a955abd
commit
4e70a4cdcb
@ -4,11 +4,11 @@ import urllib.request, urllib.error, urllib.parse
|
|||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
import argparse
|
import argparse
|
||||||
|
import shlex
|
||||||
import sys
|
import sys
|
||||||
import ssl
|
import ssl
|
||||||
from urllib.error import HTTPError
|
from urllib.error import HTTPError
|
||||||
from urllib.error import URLError
|
from urllib.error import URLError
|
||||||
from datetime import datetime, timedelta, timezone
|
|
||||||
|
|
||||||
plugin_description = \
|
plugin_description = \
|
||||||
"""
|
"""
|
||||||
@ -235,13 +235,11 @@ class JsonRuleProcessor:
|
|||||||
self.key_value_list = self.expandKeys(self.rules.key_value_list)
|
self.key_value_list = self.expandKeys(self.rules.key_value_list)
|
||||||
self.key_value_list_not = self.expandKeys(
|
self.key_value_list_not = self.expandKeys(
|
||||||
self.rules.key_value_list_not)
|
self.rules.key_value_list_not)
|
||||||
self.key_time_list = self.expandKeys(self.rules.key_time_list)
|
|
||||||
self.key_list = self.expandKeys(self.rules.key_list)
|
self.key_list = self.expandKeys(self.rules.key_list)
|
||||||
self.key_value_list_critical = self.expandKeys(
|
self.key_value_list_critical = self.expandKeys(
|
||||||
self.rules.key_value_list_critical)
|
self.rules.key_value_list_critical)
|
||||||
self.key_value_list_not_critical = self.expandKeys(
|
self.key_value_list_not_critical = self.expandKeys(
|
||||||
self.rules.key_value_list_not_critical)
|
self.rules.key_value_list_not_critical)
|
||||||
self.key_time_list_critical = self.expandKeys(self.rules.key_time_list_critical)
|
|
||||||
self.key_list_critical = self.expandKeys(self.rules.key_list_critical)
|
self.key_list_critical = self.expandKeys(self.rules.key_list_critical)
|
||||||
self.key_value_list_unknown = self.expandKeys(
|
self.key_value_list_unknown = self.expandKeys(
|
||||||
self.rules.key_value_list_unknown)
|
self.rules.key_value_list_unknown)
|
||||||
@ -333,72 +331,6 @@ class JsonRuleProcessor:
|
|||||||
failure += self.checkThreshold(key, alias, r)
|
failure += self.checkThreshold(key, alias, r)
|
||||||
return failure
|
return failure
|
||||||
|
|
||||||
def checkTimestamp(self, key, alias, r):
|
|
||||||
failure = ''
|
|
||||||
invert = False
|
|
||||||
negative = False
|
|
||||||
if r.startswith('@'):
|
|
||||||
invert = True
|
|
||||||
r = r[1:]
|
|
||||||
if r.startswith('-'):
|
|
||||||
negative = True
|
|
||||||
r = r[1:]
|
|
||||||
duration = int(r[:-1])
|
|
||||||
unit = r[-1]
|
|
||||||
|
|
||||||
if unit == 's':
|
|
||||||
tiemduration = timedelta(seconds=duration)
|
|
||||||
elif unit == 'm':
|
|
||||||
tiemduration = timedelta(minutes=duration)
|
|
||||||
elif unit == 'h':
|
|
||||||
tiemduration = timedelta(hours=duration)
|
|
||||||
elif unit == 'd':
|
|
||||||
tiemduration = timedelta(days=duration)
|
|
||||||
else:
|
|
||||||
return " Value (%s) is not a vaild timeduration." % (r)
|
|
||||||
|
|
||||||
if not self.helper.exists(key):
|
|
||||||
return " Key (%s) for key %s not Exists." % \
|
|
||||||
(key, alias)
|
|
||||||
|
|
||||||
try:
|
|
||||||
timestamp = datetime.fromisoformat(self.helper.get(key))
|
|
||||||
except ValueError as ve:
|
|
||||||
return " Value (%s) for key %s is not a Date in ISO format. %s" % \
|
|
||||||
(self.helper.get(key), alias, ve)
|
|
||||||
|
|
||||||
now = datetime.now(timezone.utc)
|
|
||||||
|
|
||||||
if timestamp.tzinfo is None:
|
|
||||||
timestamp = timestamp.replace(tzinfo=timezone.utc)
|
|
||||||
|
|
||||||
age = now - timestamp
|
|
||||||
|
|
||||||
if not negative:
|
|
||||||
if age > tiemduration and not invert:
|
|
||||||
failure += " Value (%s) for key %s is older than now-%s%s." % \
|
|
||||||
(self.helper.get(key), alias, duration, unit)
|
|
||||||
if not age > tiemduration and invert:
|
|
||||||
failure += " Value (%s) for key %s is newer than now-%s%s." % \
|
|
||||||
(self.helper.get(key), alias, duration, unit)
|
|
||||||
else:
|
|
||||||
if age < -tiemduration and not invert:
|
|
||||||
failure += " Value (%s) for key %s is newer than now+%s%s." % \
|
|
||||||
(self.helper.get(key), alias, duration, unit)
|
|
||||||
if not age < -tiemduration and invert:
|
|
||||||
failure += " Value (%s) for key %s is older than now+%s%s.." % \
|
|
||||||
(self.helper.get(key), alias, duration, unit)
|
|
||||||
|
|
||||||
return failure
|
|
||||||
|
|
||||||
def checkTimestamps(self, threshold_list):
|
|
||||||
failure = ''
|
|
||||||
for threshold in threshold_list:
|
|
||||||
k, r = threshold.split(',')
|
|
||||||
key, alias = _getKeyAlias(k)
|
|
||||||
failure += self.checkTimestamp(key, alias, r)
|
|
||||||
return failure
|
|
||||||
|
|
||||||
def checkWarning(self):
|
def checkWarning(self):
|
||||||
failure = ''
|
failure = ''
|
||||||
if self.key_threshold_warning is not None:
|
if self.key_threshold_warning is not None:
|
||||||
@ -407,8 +339,6 @@ class JsonRuleProcessor:
|
|||||||
failure += self.checkEquality(self.key_value_list)
|
failure += self.checkEquality(self.key_value_list)
|
||||||
if self.key_value_list_not is not None:
|
if self.key_value_list_not is not None:
|
||||||
failure += self.checkNonEquality(self.key_value_list_not)
|
failure += self.checkNonEquality(self.key_value_list_not)
|
||||||
if self.key_time_list is not None:
|
|
||||||
failure += self.checkTimestamps(self.key_time_list)
|
|
||||||
if self.key_list is not None:
|
if self.key_list is not None:
|
||||||
failure += self.checkExists(self.key_list)
|
failure += self.checkExists(self.key_list)
|
||||||
return failure
|
return failure
|
||||||
@ -423,8 +353,6 @@ class JsonRuleProcessor:
|
|||||||
failure += self.checkEquality(self.key_value_list_critical)
|
failure += self.checkEquality(self.key_value_list_critical)
|
||||||
if self.key_value_list_not_critical is not None:
|
if self.key_value_list_not_critical is not None:
|
||||||
failure += self.checkNonEquality(self.key_value_list_not_critical)
|
failure += self.checkNonEquality(self.key_value_list_not_critical)
|
||||||
if self.key_time_list_critical is not None:
|
|
||||||
failure += self.checkTimestamps(self.key_time_list_critical)
|
|
||||||
if self.key_list_critical is not None:
|
if self.key_list_critical is not None:
|
||||||
failure += self.checkExists(self.key_list_critical)
|
failure += self.checkExists(self.key_list_critical)
|
||||||
return failure
|
return failure
|
||||||
@ -480,7 +408,14 @@ class JsonRuleProcessor:
|
|||||||
metrics += ' '
|
metrics += ' '
|
||||||
return ("%s" % metrics, warning, critical)
|
return ("%s" % metrics, warning, critical)
|
||||||
|
|
||||||
|
def split_arguments(argument):
|
||||||
|
if argument:
|
||||||
|
# Verbinde die Liste zu einem einzigen String
|
||||||
|
combined_string = ' '.join(argument)
|
||||||
|
# Verwende shlex.split, um den String wie eine Kommandozeile zu splitten
|
||||||
|
argument = shlex.split(combined_string)
|
||||||
|
return argument
|
||||||
|
|
||||||
def parseArgs(args):
|
def parseArgs(args):
|
||||||
"""
|
"""
|
||||||
CLI argument definitions and parsing
|
CLI argument definitions and parsing
|
||||||
@ -563,19 +498,6 @@ def parseArgs(args):
|
|||||||
dest='key_value_list_critical', nargs='*',
|
dest='key_value_list_critical', nargs='*',
|
||||||
help='''Same as -q but return critical if
|
help='''Same as -q but return critical if
|
||||||
equality check fails.''')
|
equality check fails.''')
|
||||||
parser.add_argument('--key_time', dest='key_time_list', nargs='*',
|
|
||||||
help='''Checks a Timestamp of these keys and values
|
|
||||||
(key[>alias],value key2,value2) to determine status.
|
|
||||||
Multiple key values can be delimited with colon
|
|
||||||
(key,value1:value2). Return warning if the key is older
|
|
||||||
than the value (ex.: 30s,10m,2h,3d,...).
|
|
||||||
With at it return warning if the key is jounger
|
|
||||||
than the value (ex.: @30s,@10m,@2h,@3d,...).
|
|
||||||
With Minus you can shift the time in the future.''')
|
|
||||||
parser.add_argument('--key_time_critical',
|
|
||||||
dest='key_time_list_critical', nargs='*',
|
|
||||||
help='''Same as --key_time but return critical if
|
|
||||||
Timestamp age fails.''')
|
|
||||||
parser.add_argument('-u', '--key_equals_unknown',
|
parser.add_argument('-u', '--key_equals_unknown',
|
||||||
dest='key_value_list_unknown', nargs='*',
|
dest='key_value_list_unknown', nargs='*',
|
||||||
help='''Same as -q but return unknown if
|
help='''Same as -q but return unknown if
|
||||||
@ -699,6 +621,8 @@ def main(cliargs):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
args = parseArgs(cliargs)
|
args = parseArgs(cliargs)
|
||||||
|
args.key_threshold_critical=split_arguments(args.key_threshold_critical)
|
||||||
|
args.key_threshold_warning=split_arguments(args.key_threshold_warning)
|
||||||
nagios = NagiosHelper()
|
nagios = NagiosHelper()
|
||||||
context = None
|
context = None
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user