使用javascript for循环的Zabbix预处理项

使用javascript for循环的Zabbix预处理项,javascript,zabbix,Javascript,Zabbix,我正在尝试配置Zabbix中的一个项来预处理收集的一些数据,我需要编写一段Javascript代码,以便循环通过Zabbix的结果spit,该结果由API调用收集,并计算转储文件中发现的错误和等待的大写字数 下面是要循环使用的文件片段: {"body":[{"entity":{"entityType":"xxx.xxx","id":"JA0483_APSDD285_log-sp2340L-dol-ss", "name":"log-sp2340L-dol-ss","description":"",

我正在尝试配置Zabbix中的一个项来预处理收集的一些数据,我需要编写一段Javascript代码,以便循环通过Zabbix的结果spit,该结果由API调用收集,并计算转储文件中发现的错误和等待的大写字数

下面是要循环使用的文件片段:

{"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等

这可能吗?我没有JavaScript方面的经验,但我对Python和Bash有很好的了解,但Zabbix不知道这些语言可以对给定的项目进行预处理。所以我希望得到社区的一些帮助

您可以使用匹配:

假设x是字符串变量,caps中的错误总数为:

x.match(/ERROR/g).length

您可以设置一个HTTP代理项来执行api调用并收集完整的JSON

然后,您可以设置N个相关项,一个用于计数警告,一个用于计数错误等,并在那里应用预处理

要计算js中字符串中出现的内容,可以使用match函数,如上面所述:


我用下面的代码得到了这个

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

无论如何,谢谢你们的帮助

嘿@Simone Zabberoni好建议。非常感谢您分享您的知识。我将尝试使用此匹配功能,并让您知道它是否有效:干杯,彼得,也谢谢你的提示@ibrahim tanyalcin。希望我可以使用此匹配函数完成此操作:这实际上比其他两个答案更详细和复杂,而且它只解释了错误,如果你想提取警告的数量,你必须复制项目。。。这是相当不理想的。
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