本节描述了使用Duktape实现的Zabbix对JavaScript语言的扩展,以及支持的全局JavaScript函数。
Zabbix 对象提供与 Zabbix 内部功能的交互。
| 方法 | 描述 | 
|---|---|
log(loglevel, message) | 
       使用 <loglevel> 日志级别(参见配置文件中的 DebugLevel 参数)将 <message> 写入 Zabbix 日志。 | 
示例:
你可以使用以下别名:
| 别名 | 别名对应的方法 | 
|---|---|
| console.log(object) | Zabbix.log(4, JSON.stringify(object)) | 
| console.warn(object) | Zabbix.log(3, JSON.stringify(object)) | 
| console.error(object) | Zabbix.log(2, JSON.stringify(object)) | 
每次脚本执行的所有日志消息的总大小限制为 8 MB。
| 方法 | 描述 | 
|---|---|
sleep(delay) | 
       延迟 JavaScript 执行 delay 毫秒。 | 
       
示例(延迟执行 15 秒):
该对象封装了cURL句柄,允许进行简单的HTTP请求。 错误会被作为异常抛出。
每个脚本执行最多只能初始化10个HttpRequest对象。
| 方法 | 描述 | 
|---|---|
addHeader(value) | 
       添加HTTP头字段。该字段将用于所有后续请求,直到使用clearHeader()方法清除。可以向单个 HttpRequest对象添加的所有头字段的总长度限制为128 K字节(包括特殊字符和头名称)。 | 
       
clearHeader() | 
       清除HTTP头。如果未设置任何头字段,HttpRequest将在发布的数据为JSON格式时将Content-Type设置为application/json;否则设置为text/plain。 | 
       
connect(url) | 
       向URL发送HTTP CONNECT请求并返回响应。 | 
customRequest(method, url, data) | 
       允许在第一个参数中指定任何HTTP方法。将指定的方法请求发送到URL,可选地带有data载荷,并返回响应。 | 
delete(url, data) | 
       向URL发送HTTP DELETE请求,可选地带有data载荷,并返回响应。 | 
getHeaders(<asArray>) | 
       返回接收到的HTTP头字段的对象。asArray参数可以设置为"true"(例如,getHeaders(true)),"false"或未定义。如果设置为"true",则接收到的HTTP头字段值将作为数组返回;应使用此选项检索多个同名头字段的字段值。如果未设置或设置为"false",则接收到的HTTP头字段值将作为字符串返回。  | 
       
get(url, data) | 
       向URL发送HTTP GET请求,可选地带有data载荷,并返回响应。 | 
head(url) | 
       向URL发送HTTP HEAD请求并返回响应。 | 
options(url) | 
       向URL发送HTTP OPTIONS请求并返回响应。 | 
patch(url, data) | 
       向URL发送HTTP PATCH请求,可选地带有data载荷,并返回响应。 | 
put(url, data) | 
       向URL发送HTTP PUT请求,可选地带有data载荷,并返回响应。 | 
post(url, data) | 
       向URL发送HTTP POST请求,可选地带有data载荷,并返回响应。 | 
getStatus() | 
       返回上次HTTP请求的状态代码。 | 
setProxy(proxy) | 
       将HTTP代理设置为"proxy"值。如果此参数为空,则不使用代理。 | 
setHttpAuth(bitmask, username, password) | 
       在'bitmask'参数中设置启用的HTTP身份验证方法(HTTPAUTH_BASIC,HTTPAUTH_DIGEST,HTTPAUTH_NEGOTIATE,HTTPAUTH_NTLM,HTTPAUTH_NONE)。 HTTPAUTH_NONE标志允许禁用HTTP身份验证。 示例: request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, username, password)request.setHttpAuth(HTTPAUTH_NONE) | 
       
trace(url, data) | 
       向URL发送HTTP TRACE请求,可选地带有data载荷,并返回响应。 | 
示例:
try {
           Zabbix.log(4, 'jira webhook script value='+value);
         
           var result = {
               'tags': {
                   'endpoint': 'jira'
               }
           },
           params = JSON.parse(value),
           req = new HttpRequest(),
           fields = {},
           resp;
         
           req.addHeader('Content-Type: application/json');
           req.addHeader('Authorization: Basic '+params.authentication);
         
           fields.summary = params.summary;
           fields.description = params.description;
           fields.project = {"key": params.project_key};
           fields.issuetype = {"id": params.issue_id};
           resp = req.post('https://jira.example.com/rest/api/2/issue/',
               JSON.stringify({"fields": fields})
           );
         
           if (req.getStatus() != 201) {
               throw 'Response code: '+req.getStatus();
           }
         
           resp = JSON.parse(resp);
           result.tags.issue_id = resp.id;
           result.tags.issue_key = resp.key;
       } catch (error) {
           Zabbix.log(4, 'jira issue creation failed json : '+JSON.stringify({"fields": fields}));
           Zabbix.log(4, 'jira issue creation failed : '+error);
         
           result = {};
       }
         
       return JSON.stringify(result);XML对象允许在项目和低级别发现预处理和webhook中处理XML数据。
为了使用XML对象,服务器/代理必须编译支持libxml2。
| 方法 | 描述 | 
|---|---|
XML.query(data, expression) | 
       使用XPath检索节点内容。如果未找到节点,则返回null。 expression - XPath表达式; data - XML数据字符串。  | 
       
XML.toJson(data) | 
       将XML格式的数据转换为JSON。 | 
XML.fromJson(object) | 
       将JSON格式的数据转换为XML。 | 
示例:
输入:
<menu>
           <food type = "breakfast">
               <name>Chocolate</name>
               <price>$5.95</price>
               <description></description>
               <calories>650</calories>
           </food>
       </menu>输出:
{
           "menu": {
               "food": {
                   "@type": "breakfast",
                   "name": "Chocolate",
                   "price": "$5.95",
                   "description": null,
                   "calories": "650"
               }
           }
       }XML转换为JSON将根据以下规则进行处理(对于JSON转换为XML,将应用相反的规则):
示例:
输入:
输出:
示例:
输入:
输出:
示例:
输入:
输出:
示例:
输入:
输出:
示例:
输入:
输出:
示例:
输入:
输出:
使用 Duktape 实现了额外的全局 JavaScript 函数:
btoa(data) - 将数据编码为 base64 字符串atob(base64_string) - 解码 base64 字符串try {
           b64 = btoa("utf8 string");
           utf8 = atob(b64);
       } 
       catch (error) {
           return {'error.name' : error.name, 'error.message' : error.message}
       }md5(data) - 计算数据的 MD5 哈希值
sha256(data) - 计算数据的 SHA256 哈希值
hmac('<hash type>', key, data) - 返回作为十六进制格式字符串的 HMAC 哈希值;支持 MD5 和 SHA256 哈希类型;key 和 data 参数支持二进制数据。例如:
hmac('md5', key, data)hmac('sha256', key, data)sign(hash, key, data) - 返回计算的签名(使用 SHA-256 的 RSA 签名)作为字符串,其中:
 hash - 仅允许 'sha256',否则会抛出错误;
 key - 私钥。应符合 PKCS#1 或 PKCS#8 标准。私钥可以采用不同形式提供:
私钥还可以从用户宏/秘密宏/保管库中加载。
data - 将被签名的数据。可以是字符串(也支持二进制数据)或缓冲区(Uint8Array/ArrayBuffer)。
 使用 OpenSSL 或 GnuTLS 计算签名。如果 Zabbix 构建时没有任何这些加密库,会抛出错误('缺少 OpenSSL 或 GnuTLS 库')。