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

相关文章
|
8月前
|
监控 数据挖掘 API
快应用报错Module Error 分包要求 app.json#minPlatformVersion 不小于 1061, 当前值为 21解决方案-优雅草卓伊凡
快应用报错Module Error 分包要求 app.json#minPlatformVersion 不小于 1061, 当前值为 21解决方案-优雅草卓伊凡
210 0
|
10月前
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
578 7
|
11月前
|
JSON IDE Java
鸿蒙开发:json转对象插件回来了
首先,我重新编译了插件,进行了上传,大家可以下载最新的安装包进行体验了,还是和以前一样,提供了在线版和IDE插件版,两个选择,最新的版本,除了升级了版本,兼容了最新的DevEco Studio ,还做了一层优化,就是针对嵌套对象和属性的生成,使用方式呢,一年前的文章中有过详细的概述,这里呢也简单介绍一下。
347 4
鸿蒙开发:json转对象插件回来了
|
监控 Linux
yum install -y net-snmp-devel 安装不成功 zabbix项目安装,Errors during downloading metadata for repository ‘extras-common’:问题解决方案-优雅草卓伊凡
yum install -y net-snmp-devel 安装不成功 zabbix项目安装,Errors during downloading metadata for repository ‘extras-common’:问题解决方案-优雅草卓伊凡
723 13
yum install -y net-snmp-devel 安装不成功 zabbix项目安装,Errors during downloading metadata for repository ‘extras-common’:问题解决方案-优雅草卓伊凡
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
XML JSON 前端开发
json字符串CSS格式化
完成以上步骤后,你便能在网页中看到格式化后的JSON数据,它们将按照CSS定义的样式进行展示,使数据更易于阅读和理解。通过有效地结合JSON和CSS,你可以创建出更加丰富且易于交互的网页内容。
518 64
|
JSON JavaScript 前端开发
处理从API返回的JSON数据时返回Unicode编码字符串怎么处理
在处理API返回的JSON数据时,遇到类似`\u7f51\u7edc\u8fde\u63a5\u9519\u8bef`的Unicode编码字符串,可使用JavaScript内置方法转换为可读文字。主要方法包括:1. 使用`JSON.parse`自动解析;2. 使用`decodeURIComponent`和`escape`组合解码;3. 在API调用中直接处理响应数据。这些方法能有效处理多语言内容,确保正确显示非ASCII字符。
|
前端开发 开发者
如何理解 package.json 中的 proxy 字段?
`package.json` 中的 `proxy` 字段用于配置代理服务器,帮助前端开发中解决跨域问题及模拟后端响应。其基本概念、使用场景及配置方法将在本文中详细探讨,助力开发者高效调试与测试。
539 4
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
739 1
|
JSON API 数据格式
postman如何发送json请求其中file字段是一个图片
postman如何发送json请求其中file字段是一个图片
734 4