diff --git a/check_http_json.py b/check_http_json.py index 257256f..991af82 100755 --- a/check_http_json.py +++ b/check_http_json.py @@ -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