Элемент предварительной обработки Zabbix с javascript для цикла - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь настроить элемент в Zabbix для предварительной обработки собранных данных, и мне нужно обработать кусок кода Javascript, чтобы l oop через результат, полученный Zabbix, который собирается API CALL. и посчитайте, сколько слов «ОШИБКА» и «ОЖИДАНИЕ» (только заглавные буквы) было найдено в файле дампа.

Ниже приведен фрагмент файла, который нужно перебрать:

{"body":[{"entity":{"entityType":"xxx.xxx","id":"JA0483_APSDD285_log-sp2340L-dol-ss",
"name":"log-sp2340L-dol-ss","description":"","modifiedTime":1587753102338,"creationTime":1587769148481,
"displayName":"Log:_Dolomite","version":"1.0.0.669","drillHoleID":"APSDD285","type":"USRLOG",
"mode":"MOSAIC","layout":"STACKEDSECTION","categoryIds":["minerallogs"],"fileFormat":"CSV",
"compressionLevel":"NONE","pixelSize":0.0,"storeSize":7676,"generatedDate":1587753102338,
"depthFrom":0.0,"depthTo":0.0,"dataLength":0.0,"storePath":"ProcessedProducts/",
"entityType":"XXX.XXX"},"size":7676,"progress":3882,"status":"ERROR","message":"Server error response code 409: 
Key JA0483_APSDD285_log-sp2340L-dol-ss already exists in the store. Use update instead","order":0,
"dateAdded":1587769395658,"dateTransferred":1587769443174,"nextRetryDate":1587769443166,"numRetries":1},
{"entity":{"entityType":"XXX.XXX","id":"JA0483_APSDD234_log-sp2350L-chl-fe-10cm","name":"log-sp2350L-chl-fe-10cm",
"description":"","modifiedTime":1587767851726,"creationTime":1587785977841,"displayName":"__Log: Fe-chlorite (2350nm)",
"version":"1.0.0.673","drillHoleID":"APSDD234","type":"USRLOG","mode":"MOSAIC","layout":"DOWNHOLE",
"categoryIds":["minerallogs"],"fileFormat":"CSV","compressionLevel":"NONE","pixelSize":0.0,"storeSize":39078,
"generatedDate":1587767851726,"depthFrom":0.0,"depthTo":0.0,"dataLength":0.0,"storePath":"ProcessedProducts/JA0483",
"entityType":"XXX.XXX"},"size":39078,"progress":3983,"status":"ERROR","message":"Server error response code 409: 
Key JA0483_APSDD234_log-sp2350L-chl-fe-10cm already exists in the store. Use update instead"

Идея кода состоит в том, чтобы просто подсчитать количество найденных ОШИБОК и ОЖИДАНИЙ. Например, ОШИБКА = 30, ОЖИДАНИЕ = 20 et c.

Возможно ли это? У меня нет опыта работы с JavaScript, но я хорошо знаю Python и Bash, но Zabbix не знает этих языков для предварительной обработки данного элемента. Поэтому я надеюсь получить помощь от сообщества.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

Вы можете настроить элемент агента HTTP для выполнения вызова API и собрать все JSON.

Затем вы можете настроить N зависимых элементов (один для подсчета WARN, один для подсчета ERROR и т. Д. ) и примените там предварительную обработку.

Для подсчета случаев появления "ЧТО-ТО" в строке в js вы можете использовать функцию match, как описано здесь на SO:

var temp = "This is a string.";
var count = (temp.match(/is/g) || []).length;
console.log(count);
0 голосов
/ 05 мая 2020

Я получил это, работая с приведенным ниже кодом.

var numError = 0
if(value){
    var json = JSON.parse(value)
    for(var ii =0; ii < json.length; ii++){
        var msg = json[ii]
        if(msg.status === "ERROR"){
           numError += 1
        }
    }
}
return numError

Спасибо за помощь в любом случае, ребята. :)

0 голосов
/ 30 апреля 2020

Вы можете использовать match: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

при условии, что x - ваша строковая переменная, общее количество ошибок в заглавных буквах будет:

x.match(/ERROR/g).length
...