【zabbix】zabbix预处理JavaScript总结记录

1. 拆分字段值

解析{#ADVSPOOLRELATION}字段,根据空格拆分字段值,赋值给两个宏{#VSNAME}、{#POOLNAME}。

var data = JSON.parse(value),arr=[];
for(var i=0;i<data.length;i++){
    var val = data[i]['{#ADVSPOOLRELATION}']
    var valData = val?val.split(' '):[];
    if(val){
     var obj={
        'VSNAME':valData[0],
        "POOLNAME":valData[1]
     }
    }
    arr.push(obj)
}
return JSON.stringify(arr)

原始数据

[
  {
    "{#SNMPINDEX}": 1,
    "{#ADVSPOOLRELATION}": "aaa-30-vs aaa-30-pool"
  },
  {
    "{#SNMPINDEX}": 2,
    "{#ADVSPOOLRELATION}": "aaa-40-vs aaa-40-pool"
  }
]

最后结果

[
  {
    "{#VSNAME}": "aaa-30-vs",
    "{#POOLNAME}": "aaa-30-pool"
  },
  {
    "{#VSNAME}": "aaa-40-vs",
    "{#POOLNAME}": "aaa-40-pool"
  }
]

2. 解析传感器命令返回

传感器命令可以返回模块、温度、电源等信息

// 定义正则表达式
    var pciPattern = /^(loc1):\s+\+(\d+\.\d+)°C/;
    var isaPattern = /^Physical id (\d+):\s+\+(\d+\.\d+)°C/;
    var corePattern = /^Core (\d+):\s+\+(\d+\.\d+)°C/;
    var powerPattern = /^(.+):\s+(\d+\.\d+)\s+W/;

    // 结果对象
    var result = [];

    var templateArr = value.split("\n\n");
    for (var j = 0; j < templateArr.length; j++) {
      var lines = templateArr[j].split("\n");
      var lineKey = lines[0].replace('\r','');
      var coreDataCount = 0,
        coreDataLength = 0;
      for (var i = 0; i < lines.length; i++) {
        var line = lines[i].trim();
        // 匹配 PCI
        var pciMatch = line.match(pciPattern);
        if (pciMatch) {
          var item = {
              "{#NAME}": lineKey + " " + pciMatch[1],
              "{#VALUE}": pciMatch[2]
          };
          result.push(item);
          continue;
        }

        // 匹配 ISA 物理ID
        var isaMatch = line.match(isaPattern);
        if (isaMatch) {
          var item = {
            "{#NAME}": lineKey + " " + "Physical id " + isaMatch[1],
            "{#VALUE}": isaMatch[2]
          };
          result.push(item);
          continue;
        }
        // console.log(result);

        // 匹配 ISA 核心温度
        var coreMatch = line.match(corePattern);
        if (coreMatch) {
          coreDataCount += Number(coreMatch[2]);
          coreDataLength++;
          // var adapter = result[isaMatch[1]];
          // if (!adapter.cores) {
          //   adapter.cores = [];
          // }
          // adapter.cores.push(coreMatch[2]);
          continue;
        }

        // 匹配电源
        var powerMatch = line.match(powerPattern);
        if (powerMatch) {
          var item = {
            "{#NAME}": lineKey + " " + powerMatch[1],
            "{#VALUE}": powerMatch[2]
          };
          result.push(item);
        }
      }
      var avg = (coreDataCount / coreDataLength).toFixed(2);
      if (coreDataLength) {
        var item = {
          "{#NAME}": lineKey + " Core avg",
          "{#VALUE}": avg
        };
        result.push(item);
      }
    }
    // 返回JSON化的结果
    return JSON.stringify(result);
}

原始数据

coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +100.0°C  (high = +100.0°C, crit = +100.0°C)
Core 0:       +100.0°C  (high = +100.0°C, crit = +100.0°C)
Core 1:       +100.0°C  (high = +100.0°C, crit = +100.0°C)

coretemp-isa-0001
Adapter: ISA adapter
Package id 1: +100.0°C  (high = +100.0°C, crit = +100.0°C)
Core 0:       +100.0°C  (high = +100.0°C, crit = +100.0°C)
Core 1:       +100.0°C  (high = +100.0°C, crit = +100.0°C)

最后结果

[
  {
    "{#NAME}": "coretemp-isa-0000 Core avg",
    "{#VALUE}": "100.00"
  },
  {
    "{#NAME}": "coretemp-isa-0001 Core avg",
    "{#VALUE}": "100.00"
  }
]

3. 判断文件是否存在(以天轮换)

开启远程执行命令选项

配置一个system.run[dir /b E:\opt]获取目录下所有文件,使用JavaScript对返回数据进行比对是否存在以及文件的修改时间。

var currentDate = new Date();
var year = currentDate.getFullYear();
var month = currentDate.getMonth() + 1;
var day = currentDate.getDate();
month = (month < 10 ? '0' : '') + month;
day = (day < 10 ? '0' : '') + day;
const date = year+''+month+''+day;
const fileData=['sss'+date+'.txt','bbb'+date+'.txt'];
const fileResult=[];
for(var i=0;i<fileData.length;i++){
  const index = value.indexOf(fileData[i]);
  if(index!=-1){
     fileResult.push({
         "exists": 1,
         "filename": 'E:\\opt\\'+fileData[i]
     })
  }else {
     fileResult.push({
         "exists": 0,
         "filename": 'E:\\opt\\'+fileData[i]
     })
  }
}
return JSON.stringify(fileResult)

返回结果:

[
    {
        "exists": 1,
        "filename": "E:\\opt\\sss20240919.txt"
    },
    {
        "exists": 0,
        "filename": "E:\\opt\\bbb20240919.txt"
    }
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值