当前栏目
手册教程|运维人必须要会代码能力-监控项预处理JavaScript 预处理
概 述
Zabbix6.0手册已发布,发现不少初学者面对浩渺的手册找不到重点。手册教程系列为初学者挑重点,本节提供 JavaScript 预处理的详细信息。
J a v a S c r i p t 预 处 理
JavaScript 预处理是通过调用具有单个参数“值”和用户提供的函数体的 JavaScript 函数来完成的。预处理步骤的结果是从这个函数返回的值,例如,要执行华氏到摄氏度的转换,用户必须输入:
return (value - 32) * 5 / 9
在 JavaScript 预处理参数中,将被服务器包装成一个 JavaScript 函数:
function (value){ return (value - 32) * 5 / 9}
输入参数“值”始终作为字符串传递。返回值通过 ToString() 方法自动强制转换为字符串(如果失败,则错误作为字符串值返回),但有一些例外:
- 返回未定义的值将导致错误
- 返回空值将导致输入值被丢弃,很像“Custom on fail”操作中的“丢弃值”预处理。
可以通过抛出值/对象(通常是字符串或错误对象)来返回错误。
例子:
if (value == 0) throw "Zero input value"return 1/value
每个脚本都有 10 秒的执行超时(根据脚本的不同,触发超时可能需要更长的时间);超过它会返回错误。强制执行 64 兆字节的堆限制。
JavaScript 预处理步骤字节码被缓存并在下次应用该步骤时重用。对监控项预处理步骤的任何更改都将导致缓存的脚本被重置并稍后重新编译。
连续运行时失败(连续 3 次)将导致引擎重新初始化,以减少一个脚本破坏下一个脚本的执行环境的可能性(此操作使用 DebugLevel 4 及更高级别记录)。
JavaScript 预处理是用 Duktape 实现的 (https://duktape.org/) JavaScript 引擎。
在 脚 本 中 使 用 宏
可以在 JavaScript 代码中使用用户宏。如果脚本包含用户宏,则这些宏在执行特定预处理步骤之前由服务器/代理解析。注意,在前端测试预处理步骤时,宏值不会被拉取,需要手动输入。
将宏替换为其值时将忽略上下文。宏值按原样插入代码中,在将值放入 JavaScript 代码之前无法添加额外的转义。请注意,这可能在某些情况下会导致 JavaScript 错误 。
在下面的示例中,如果接收到的值超过 {$THRESHOLD} 宏值,则将返回阈值(如果存在):
var threshold = '{$THRESHOLD}';return (!isNaN(threshold) && value > threshold) ? threshold : value;
相关文章
- threejs旋转入门
- 我用nodejs实现了热加载接口文件,感觉又离“serverless”进了一步
- nodejs 解决sql注入方案
- nvm-windows管理nodejs版本神器——代理和镜像配置
- 关于node代码如何丝滑执行多条命令行这件事
- JavaMoney规范(JSR 354)与对应实现解读
- Node.js 应用全链路追踪技术——[全链路信息获取]
- api接口返回动态的json格式?我太难了,尝试一下 linq to json
- 对 JsonConvert 的认识太肤浅了,终于还是遇到了问题
- Node.js 模块化你所需要知道的事
- 初识 D3.js :打造专属可视化
- knockoutjs如何动态加载外部的file作为component中的template数据源
- NodeJs和NPM的基本操作
- 使用 System.Text.Json 时,如何处理 Dictionary 中 Key 为自定义类型的问题
- 如何使用 System.Text.Json 序列化 DateTimeOffset 为 Unix 时间戳
- javascript使用正则表达式替换或者捕获子字符串
- FastAPI从入门到实战(14)——JSON编码兼容与更新请求
- node与浏览器中的cookie
- 使用JSONPath解析json数据
- JS函数hook