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 json
|
||||
import argparse
|
||||
import shlex
|
||||
import sys
|
||||
import ssl
|
||||
from urllib.error import HTTPError
|
||||
from urllib.error import URLError
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
plugin_description = \
|
||||
"""
|
||||
@ -235,13 +235,11 @@ class JsonRuleProcessor:
|
||||
self.key_value_list = self.expandKeys(self.rules.key_value_list)
|
||||
self.key_value_list_not = self.expandKeys(
|
||||
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_value_list_critical = self.expandKeys(
|
||||
self.rules.key_value_list_critical)
|
||||
self.key_value_list_not_critical = self.expandKeys(
|
||||
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_value_list_unknown = self.expandKeys(
|
||||
self.rules.key_value_list_unknown)
|
||||
@ -333,72 +331,6 @@ class JsonRuleProcessor:
|
||||
failure += self.checkThreshold(key, alias, r)
|
||||
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):
|
||||
failure = ''
|
||||
if self.key_threshold_warning is not None:
|
||||
@ -407,8 +339,6 @@ class JsonRuleProcessor:
|
||||
failure += self.checkEquality(self.key_value_list)
|
||||
if self.key_value_list_not is not None:
|
||||
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:
|
||||
failure += self.checkExists(self.key_list)
|
||||
return failure
|
||||
@ -423,8 +353,6 @@ class JsonRuleProcessor:
|
||||
failure += self.checkEquality(self.key_value_list_critical)
|
||||
if self.key_value_list_not_critical is not None:
|
||||
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:
|
||||
failure += self.checkExists(self.key_list_critical)
|
||||
return failure
|
||||
@ -480,7 +408,14 @@ class JsonRuleProcessor:
|
||||
metrics += ' '
|
||||
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):
|
||||
"""
|
||||
CLI argument definitions and parsing
|
||||
@ -563,19 +498,6 @@ def parseArgs(args):
|
||||
dest='key_value_list_critical', nargs='*',
|
||||
help='''Same as -q but return critical if
|
||||
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',
|
||||
dest='key_value_list_unknown', nargs='*',
|
||||
help='''Same as -q but return unknown if
|
||||
@ -699,6 +621,8 @@ def main(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()
|
||||
context = None
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user