From d3a2f3ed9ec43d657ec355783b1102630191b0da Mon Sep 17 00:00:00 2001 From: Markus Opolka Date: Mon, 29 Jul 2024 11:11:41 +0200 Subject: [PATCH] Improve error handling - Added another try-catch around the CLI Rules parsing to make sure that users get a clean exit code and error messages --- check_http_json.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/check_http_json.py b/check_http_json.py index 257256f..1ff1718 100755 --- a/check_http_json.py +++ b/check_http_json.py @@ -6,6 +6,7 @@ import json import argparse import sys import ssl +import traceback from urllib.error import HTTPError from urllib.error import URLError from datetime import datetime, timedelta, timezone @@ -720,6 +721,7 @@ def main(cliargs): json_data = '' try: + # Requesting the data from the URL json_data = make_request(args, url, context) except HTTPError as e: # Try to recover from HTTP Error, if there is JSON in the response @@ -736,23 +738,29 @@ def main(cliargs): sys.exit(nagios.getCode()) try: + # Loading the JSON data from the request data = json.loads(json_data) except ValueError as e: + debugPrint(args.debug, traceback.format_exc()) nagios.append_message(UNKNOWN_CODE, " JSON Parser error: %s" % str(e)) else: verbosePrint(args.verbose, 1, json.dumps(data, indent=2)) - # Apply rules to returned JSON data + + try: + # Applying rules to returned JSON data processor = JsonRuleProcessor(data, args) nagios.append_message(WARNING_CODE, processor.checkWarning()) nagios.append_message(CRITICAL_CODE, processor.checkCritical()) nagios.append_metrics(processor.checkMetrics()) nagios.append_message(UNKNOWN_CODE, processor.checkUnknown()) + except Exception as e: # pylint: disable=broad-exception-caught + debugPrint(args.debug, traceback.format_exc()) + nagios.append_message(UNKNOWN_CODE, " Rule Parser error: %s" % str(e)) # Print Nagios specific string and exit appropriately print(nagios.getMessage()) sys.exit(nagios.getCode()) - if __name__ == "__main__": # Program entry point main(sys.argv[1:])