本节描述了使用Duktape实现的Zabbix对JavaScript语言的扩展,以及支持的全局JavaScript函数。
Zabbix对象提供与内部Zabbix功能的交互。
方法 | 描述 |
---|---|
log(loglevel, message) |
使用<loglevel> 日志级别将<message> 写入Zabbix日志(参见配置文件的DebugLevel参数)。 |
示例:
您可以使用以下别名:
别名 | 别名为 |
---|---|
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) |
延迟delay 毫秒执行JavaScript。 |
示例(延迟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 函数,使得在预处理步骤中可以执行更复杂的操作:
示例用法如下:
try {
var b64 = btoa("utf8 string");
var utf8 = atob(b64);
} catch (error) {
return {'error.name': error.name, 'error.message': error.message};
}
在这个示例中,btoa
函数将 "utf8 string" 编码为 base64 格式,然后使用 atob
函数将其解码回原始的 UTF-8 字符串。如果发生错误,将捕获并返回错误的名称和消息。
此外,还有以下哈希函数:
这些函数可用于安全性需求更高的应用中,例如身份验证或数据完整性验证。示例用法如下:
还有一个支持 HMAC 哈希的函数:
示例用法如下:
var hmac_md5 = hmac('md5', 'secret_key', 'data to hash');
var hmac_sha256 = hmac('sha256', 'secret_key', 'data to hash');
这些全局函数扩展了JavaScript预处理的功能,使其能够处理更复杂的数据转换和加密操作。