Я хочу использовать плагин JSON Nagios Дрю Керриган на GitHub (drewkerrigan / nagios-http-json) для мониторинга вывода REST API, но я изо всех сил пытаюсь получить правильный синтаксис запроса.
Вот образец JSON, который возвращается, когда я нажимаю на веб-API:
{"Checks":[
{"description":"can read interconnect 0910",
"result":"passed"},
{"description":"can read interconnect 1011",
"result":"passed"},
{"description":"can read linknode 1112",
"result":"passed"},
{"description":"can read linknode 1213",
"result":"passed"},
{"description":"can read dbnode 1314",
"result":"passed"},
{"description":"can read dbnode 1415",
"result":"passed"},
{"description":"can read dbnode 1516",
"result":"passed"},
{"description":"can read dbnode 1617",
"result":"passed"},
{"description":"can read dbnode 1718",
"result":"passed"},
{"description":"can read main table",
"result":"passed"},
{"description":"can read secondary table",
"result":"passed"},
{"description":"can read postcode table",
"result":"passed"},
{"description":"can read/write to docs folder",
"result":"passed"},
{"description":"can read/write to config folder",
"result":"passed"},
{"description":"la integration enabled",
"result":"passed"},
{"description":"webservice password",
"result":"passed"},
{"description":"can authenticate in largedb",
"result":"passed"},
{"description":"can import locales",
"result":"passed"}
]}
В плагине Дрю есть переключатель проверки равенства:
-q [KEY_VALUE_LIST [KEY_VALUE_LIST ...]], --key_equals [KEY_VALUE_LIST [KEY_VALUE_LIST ...]]
Checks equality 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 equality check
fails
и Дрю приводит примеры того, как структурировать запрос для различных синтаксисов ключа / значения, но я не могу понять это правильно, и я получаю ошибки python, которые, как я ожидаю, связаны с синтаксисом моего запроса, не отражающим структуру JSON.
Может ли кто-нибудь помочь мне с примером проверки того, является ли, скажем, «может читать основную таблицу» «пройдено».
Плагин Дрю не закодирован для обработки этого конкретного формата JSON, поэтому я взломал небольшое исправление, чтобы взять наши данные JSON и преобразовать их в более удобную для плагинов структуру (простые пары ключ: значение) - я не мог изменить формат JSON, генерируемый нашим приложением, поскольку он используется где-то еще, и слишком многое может сломаться. В основном программном блоке:
[SNIP]
else:
debugPrint(args.debug, 'DEBUG: In expected loop')
jsondata = response.read()
data = json.loads(jsondata)
# Modify the data structure to a format more friendly to the plugin
newD={}
for item in data["Checks"]:
newD[item.get("description")]=item.get("result")
data = newD
# End of modification
debugPrint(args.debug, 'json:')
debugPrint(args.debug, data, True)
# Apply rules to returned JSON data
processor = JsonRuleProcessor(data, args)
[SNIP]