Zabbix监控系统开发(2):JSON多维数组筛选字段是否包含字符串的解决方案

简介: Zabbix监控系统开发(2):JSON多维数组筛选字段是否包含字符串的解决方案

Zabbix监控系统设备出现故障,即提示停机和告警信息时,是在triggers字段的中完成的。而triggers字段是一个数组对象,triggers[0]代表停机,triggers[1]代表告警。


1.triggers[0].value为0正常,为1停机;

2.triggers[1].value0正常,为1告警;


triggers数据结构

[
    {
        "triggerid": "23025",
        "expression": "{34226}=0",
        "description": "百度 Ping 不可达 / 安防设备",
        "url": "",
        "status": "0",
        "value": "0",
        "priority": "4",
        "lastchange": "1660602885",
        "comments": "",
        "error": "",
        "templateid": "0",
        "type": "0",
        "state": "0",
        "flags": "4",
        "recovery_mode": "0",
        "recovery_expression": "",
        "correlation_mode": "0",
        "correlation_tag": "",
        "manual_close": "0",
        "opdata": "",
        "event_name": "",
        "uuid": ""
    },
    {
        "triggerid": "23029",
        "expression": "{34230}>1",
        "description": "百度 Ping 延迟大于 1000 毫秒 / 安防设备",
        "url": "",
        "status": "0",
        "value": "0",
        "priority": "2",
        "lastchange": "1660360605",
        "comments": "",
        "error": "",
        "templateid": "0",
        "type": "0",
        "state": "0",
        "flags": "4",
        "recovery_mode": "0",
        "recovery_expression": "",
        "correlation_mode": "0",
        "correlation_tag": "",
        "manual_close": "0",
        "opdata": "",
        "event_name": "",
        "uuid": ""
    }
]


项目需求

在数据传递到大屏时,如果出现停机或告警信息时,状态灯由绿变红。



项目分析

每个设备都对应一组数据,每组数据都有对应的状态展示,即triggers[0]和triggers[1];

当API接口传递N个设备时,意味着数据对应N个triggers[0]和triggers[1];

在N个triggers[0]和triggers[1]数据中,有一个出现1,则表明故障,将状态灯调整即可。


解决思路

将上面的项目分析,转化为技术底层逻辑。

传过来的json数据,单独过滤出triggers,将过滤出的triggers重新组合成一个新的数组。只要判断在新的数组中,包含“1”即表明当前设备中存在故障设备,调整状态灯即可。


核心代码

获取API数据

 $.when(
        $.getJSON('api/api.php?act=getZabAlert&token=3cab7ce4142608c0f40c785b5ab5ca24', {keys: '安防设备'})
    ).done(function (res1) {
    //数据处理区
 });

数据处理区

   /*状态灯判断*/
        var lightStatus = [];
        for (var j = 0; j < res1.length; j++) {
        lightStatus.push([res1[j].triggers[0].value, res1[j].triggers[1].value]);
        }
        if (lightStatus.toString().indexOf("1") > -1) {
            // 状态灯处理
        }

将lightStatus数组通过.toString()方法转为字符串,然后使用indexOf方法判断是否包含"1"这个字符传。如果包含,则调用状态灯。

状态灯处理

 $("#wStatus").removeClass().addClass("alert1");


状态灯CSS

/*告警状态*/
.alert1 {
    display: inline-block;
    width: 10px;
    height: 10px;
    line-height: 10px;
    border-radius: 50%;
    background: #e60000; /*FF0087*/
    margin: auto 5px;
}
.alert2 {
    display: inline-block;
    width: 10px;
    height: 10px;
    line-height: 10px;
    border-radius: 50%;
    background: #40f453;
    margin: auto 5px;
}
.alert3 {
    display: inline-block;
    width: 10px;
    height: 10px;
    line-height: 10px;
    border-radius: 50%;
    background: #FFBF00;
    margin: auto 5px;
}


话题延伸

如何单独判断当前设备是停机还是告警状态?

    var light1 = [], light2 = [];
    for (var j = 0; j < res1.length; j++) {
        light1.push([res1[j].triggers[0].value]);
        light2.push([res1[j].triggers[1].value]);
    }
    if (light1.toString().indexOf("1") > -1 && light2.toString().indexOf("1") > -1) {
        // 停机&告警
    }
    if (light1.toString().indexOf("1") > -1) {
        // 停机
    }
    if (light2.toString().indexOf("1") > -1) {
        // 告警
    }


@lockdata.cn

相关文章
|
1月前
|
存储 JSON JavaScript
Python字典和JSON字符串相互转化方法
【2月更文挑战第18天】
60 3
|
6天前
|
JSON 运维 Kubernetes
云效产品使用报错问题之流水线中配置了AppStack,构建时下载的制品内容为json字符串,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
24天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
25天前
|
JSON 数据格式
Json字符串与QVariantList 对象相互转换
Json字符串与QVariantList 对象相互转换
7 0
|
1月前
|
JSON JavaScript PHP
PHP把unicode编码的json字符串转中文
PHP把unicode编码的json字符串转中文
13 0
|
2月前
|
SQL JSON 关系型数据库
sql如何获取字段里的json值
sql如何获取字段里的json值
|
3月前
|
JSON JavaScript Android开发
JS生成JSON字符串---autojs pro 篇
JS生成JSON字符串---autojs pro 篇
30 0
|
3月前
|
JSON fastjson 数据库
字符编码导致Rapidjson(腾讯开源的json解析库)到Fastjson(阿里开发的Java json解析库)转换失败的原因分析
最近在客户端的开发的过程中,使用到了RapidJson,公司的开发是客户端和数据库端都由不同的人进行开发,我负责的客户端的逻辑开发(使用c++),开发工具同时使用了VS2017和QT的编译环境,使用QT主要是为了客户端界面开发方便,而使用了VS环境主要是维护公司开发的数据库接口库,这个库的唯一作用就是作为一个中间桥梁,使用Rapidjson将数据库接口的json数据格式解析为结构体数据,从而在客户端界面进行展示,或者接收客户端的数据,使用Rapidjson将其转换为json数据,发送给数据库接口以保存数据使用 。不太明白的可以参考我上一篇文章说明Rapidjson的使用过程-Parse解析数组
53 0
|
3月前
|
JSON 关系型数据库 MySQL
这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
【1月更文挑战第17天】【1月更文挑战第84篇】这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
34 1
|
3月前
|
JSON 前端开发 JavaScript
将 JavaScript 对象或值转换为 JSON 字符串:JSON.stringify()
将 JavaScript 对象或值转换为 JSON 字符串:JSON.stringify()
72 3

推荐镜像

更多