drewkerrigan / nagios-http-json

A generic plugin for Nagios which checks json values from a given HTTP endpoint against argument specified rules and determines the status and performance data for that service.
Other
67 stars 60 forks source link

Issue when selecting all keys #72

Closed pvvqla closed 2 years ago

pvvqla commented 3 years ago

Hello,

When I am trying to select all keys of an json api using this syntax (*).capacity.value I have this error:

File "./check_http_json.py", line 433, in nagios.append_metrics(processor.checkMetrics()) File "./check_http_json.py", line 246, in checkMetrics if self.helper.exists(key): File "./check_http_json.py", line 104, in exists def exists(self, key): return (self.get(key) != (None, 'not_found')) File "./check_http_json.py", line 115, in get return self.getSubElement(key, data) File "./check_http_json.py", line 78, in getSubElement return self.get(remainingKey, data[partialKey]) File "./check_http_json.py", line 117, in get return self.getSubArrayElement(key, data) File "./check_http_json.py", line 84, in getSubArrayElement index = int(key[key.find(self.arrayOpener) + 1:key.find(self.arrayCloser)]) ValueError: invalid literal for int() with base 10: '' [root@eyes2 plugins]# ./check_http_json.py -H localhost:3010 -p data -m imdata.().eqptStorage.attributes.available

If i use an integer like imdata.(0).eqptStorage.attributes.available it works.

How can i select all the keys in a json file?

Thank you.

martialblog commented 2 years ago

Hi,

Is this what you are trying to do?

curl http://localhost:8000/bytes-ok.json                                                     
[
  {
  "memory": [{"availableBytes": 231}]
  },
  {
  "memory": [{"availableBytes": 321}]
  },
  {
  "memory": [{"availableBytes": 123}]
  }
]

curl http://localhost:8000/bytes-not-ok.json
[
  {
  "memory": [{"availableBytes": 123}]
  },
  {
  "memory": [{"availableBytes": 231}]
  },
  {
  "memory": []
  }
]
./check_http_json.py -H localhost:8000 -p bytes-ok.json -E "(*).memory(0).availableBytes"
OK: Status OK.

./check_http_json.py -H localhost:8000 -p bytes-not-ok.json -E "(*).memory(0).availableBytes"
CRITICAL: Status CRITICAL. Key (2).memory(0).availableBytes did not exist.
martialblog commented 2 years ago

Needs feedback. Can be reopened if necessary