diff --git a/check_http_json.py b/check_http_json.py index 6b74bd9..4781abd 100755 --- a/check_http_json.py +++ b/check_http_json.py @@ -225,9 +225,9 @@ class JsonRuleProcessor: if self.rules.value_separator: value_separator = self.rules.value_separator self.helper = JsonHelper(self.data, separator, value_separator) - debugPrint(rules_args.debug, "rules:%s" % rules_args) - debugPrint(rules_args.debug, "separator:%s" % separator) - debugPrint(rules_args.debug, "value_separator:%s" % value_separator) + debugPrint(rules_args.debug, "rules: %s" % rules_args) + debugPrint(rules_args.debug, "separator: %s" % separator) + debugPrint(rules_args.debug, "value_separator: %s" % value_separator) self.metric_list = self.expandKeys(self.rules.metric_list) self.key_threshold_warning = self.expandKeys( self.rules.key_threshold_warning) @@ -346,6 +346,8 @@ class JsonRuleProcessor: def checkCritical(self): failure = '' + if not self.data: + failure = " Empty JSON data." if self.key_threshold_critical is not None: failure += self.checkThresholds(self.key_threshold_critical) if self.key_value_list_critical is not None: diff --git a/test/test_check_http_json.py b/test/test_check_http_json.py index 489213a..659e77c 100644 --- a/test/test_check_http_json.py +++ b/test/test_check_http_json.py @@ -256,7 +256,7 @@ class UtilTest(unittest.TestCase): # This should not throw a KeyError data = '{}' - self.check_data(rules.dash_q(['(0).Node,foobar', '(1).Node,missing']), data, WARNING_CODE) + self.check_data(rules.dash_q(['(0).Node,foobar', '(1).Node,missing']), data, CRITICAL_CODE) def test_subelem(self): @@ -274,3 +274,23 @@ class UtilTest(unittest.TestCase): self.check_data(rules.dash_E(['(*).capacity.value.too_deep']), data, CRITICAL_CODE) # Should not throw keyerror self.check_data(rules.dash_E(['foo']), data, CRITICAL_CODE) + + + def test_empty_key_value_array(self): + """ + https://github.com/drewkerrigan/nagios-http-json/issues/61 + """ + + rules = RulesHelper() + + # This should simply work + data = '[{"update_status": "finished"},{"update_status": "finished"}]' + self.check_data(rules.dash_q(['(*).update_status,finished']), data, OK_CODE) + + # This should warn us + data = '[{"update_status": "finished"},{"update_status": "failure"}]' + self.check_data(rules.dash_q(['(*).update_status,finished']), data, WARNING_CODE) + + # This should throw an error + data = '[]' + self.check_data(rules.dash_q(['(*).update_status,warn_me']), data, CRITICAL_CODE) diff --git a/test/test_main.py b/test/test_main.py index 47d77c7..a531af7 100644 --- a/test/test_main.py +++ b/test/test_main.py @@ -12,7 +12,7 @@ from check_http_json import main class MockResponse(): - def __init__(self, status_code=200, content='{}'): + def __init__(self, status_code=200, content='{"foo": "bar"}'): self.status_code = status_code self.content = content