# HttpClient-JavaScript
简述
HttpClient-JavaScript DIP插件是通过编写JS脚本,发送HTTP请求来完成数据对接。在该类型DIP插件中我们可以通过调用函数库中的函数,来实现各类HTTP请求的发送。例如:GET、POST、PUT、DELETE等等。还可以将接收到的数据,通过简单的JS语法来进行数据格式转换,再输出到数据库、中间件等组件中,是一个使用频率相对较高的DIP插件。
# 1. 创建DIP实例说明
- 名称: 填写用户自定义DIP实例名称。
Cron表达式: 填写Cron表达式,用于定期执行脚本代码
脚本配置说明
初始界面如下图所示:
在脚本编辑区域内,将光标定位到待加入代码位置,点击标题栏相应代码模板,选择欲加入的代码模板块,如:输入代码模板模块中的GET方式发送请求即可自动添加代码块。
# 2. 代码详细说明
# 数据样例
[
{
"ciCode":"P211-E1-01",
"metric":"CPU使用率",
"instance":"cpu0",
"value":"50",
"timestamp":"1500790703007"
}
]
2
3
4
5
6
7
8
9
- 参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
ciCode | 必选 | String | 配置项唯一标识 |
metric | 必选 | String | 性能数据所属的指标名称 |
instance | 可选 | String | 性能数据所属的指标实例,若无则填英文字符下划线,"_" |
value | 必选 | String | 性能数据的值 |
timestamp | 可选 | String | 数据采集时间,若为空则默认当前时间,时间戳格式 |
- 请求返回值
{
"ResponseHeaders":{
"Access-Control-Allow-Origin":"*",
"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE",
"content-type":"text/plain; charset=UTF-8",
"Access-Control-Allow-Headers":"Origin, X-Requested-With, Content-Type, Accept"
},
"ResponseBody":{
"code":200,
"data":[
{
"instance":"cpu1",
"ciCode":"P211-E1-02",
"metric":"CPU使用率",
"value":"30",
"timestamp":"1500790703007"
}
],
"status":"success"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 代码样例
function run() {
var ArrayList = Java.type("java.util.ArrayList");
var HashMap = Java.type("java.util.HashMap");
var HttpClient = Java.type("com.uinnova.dip.javascript.http.util.HTTPClient");
// 初始化参数2 请求header头部信息
var headers = new java.util.HashMap();
// 初始化参数3 字符编码集格式
var charset = "UTF-8";
var MysqlOut = Java.type("com.uinnova.di.common.out.MysqlOut");
/**
* 初始化mysql连接
* @param url mysql地址
* @param username 用户名
* @param password 密码
* @param dataType 数据类型 (1:性能数据, 2:告警数据)
*/
var url = "jdbc:mysql://0.0.0.0:3306/db_vmdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8";
var username = "";
var password = "";
var dataType = 1;
var out = new MysqlOut(url, username, password, dataType);
/**
* 方法介绍: 通过GET的方式, 发送http请求, 获取相关资源
* 参数1: url 进行http请求的请求地址, 例如: http://192.168.1.1/test
* 参数2: headers 请求的header头部信息, 填写示例: headers.put("Connection","keep-alive"); 无特殊情况可不填写, 默认为空Map
* 参数3: charset 字符编码集格式, 默认或填写null, 采用UTF-8编码集,无特殊需求可不修改
*/
var result = HttpClient.doGet("url", headers, charset);
// 通过日志打印出请求的返回结果
logger.info("Request return result: "+result);
var resultJson = JSON.parse(result);
var data = JSON.parse(resultJson["ResponseBody"])["data"];
if (data != null && data.length != 0) {
// 累计接收数据
heartBeat.addInCount(data.length);
var list = new ArrayList();
for(var i = 0;i<data.length;i++){
var objMap = new HashMap();
objMap.put("ciCode", data[i]["ciCode"]);
objMap.put("metric", data[i]["metric"]);
objMap.put("instance", data[i]["instance"]);
objMap.put("value", data[i]["value"]);
objMap.put("timestamp", data[i]["timestamp"] + "");
if(objMap.get("timestamp").length != 13){
continue;
}
list.add(objMap);
}
// 输出结果数据到MySQL
out.out(list);
// 累计输出数据
heartBeat.addOutCount(list.size());
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 关键代码说明
- 通过GET方式发送HTTP请求
/**
* 方法介绍: 通过GET的方式, 发送http请求, 获取相关资源
* 参数1: url 进行http请求的请求地址, 例如: http://192.168.1.1/test
* 参数2: headers 请求的header头部信息, 填写示例: headers.put("Connection","keep-alive"); 无特殊情况可不填写, 默认为空Map
* 参数3: charset 字符编码集格式, 默认或填写null, 采用UTF-8编码集,无特殊需求可不修改
*/
var result = HttpClient.doGet("url", headers, charset);
2
3
4
5
6
7
参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | 请求地址的URL |
headers | 必选 | Map<String,String> | 无特殊情况不填写,默认为空Map |
charset | 可选 | String | 字符编码集格式,例如UTF-8 |
- HttpClient接收到请求返回结果,将结果处理为对象
var resultJson = JSON.parse(result);
var data = JSON.parse(resultJson["ResponseBody"])["data"];
if (data != null && data.length != 0) {
// 累计接收数据
heartBeat.addInCount(data.length);
var list = new ArrayList();
for(var i = 0;i<data.length;i++){
var objMap = new HashMap();
objMap.put("ciCode", data[i]["ciCode"]);
objMap.put("metric", data[i]["metric"]);
objMap.put("instance", data[i]["instance"]);
objMap.put("value", data[i]["value"]);
objMap.put("timestamp", data[i]["timestamp"] + "");
if(objMap.get("timestamp").length != 13){
continue;
}
list.add(objMap);
}
// 输出结果数据到MySQL
out.out(list);
// 累计输出数据
heartBeat.addOutCount(list.size());
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- 建立MySQL连接
/**
* 初始化MySQL连接
* @param url mysql地址
* @param username 用户名
* @param password 密码
* @param dataType 数据类型 (1:性能数据, 2:告警数据)
*/
var url = "jdbc:mysql://0.0.0.0:3306/db_vmdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8";
var username = "";
var password = "";
var dataType = 1;
var out = new MysqlOut(url, username, password, dataType);
2
3
4
5
6
7
8
9
10
11
12
参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | mysql连接字符串,格式:jdbc:mysql://ip:端口/数据库Scheme?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8 |
username | 必选 | String | mysql连接用户名 |
passowrd | 必选 | String | mysql连接密码 |
dataType | 必选 | int | 性能监控数据(1) or 事件数据(2),事件数据输出的表名和表结构不同 |
输出结果数据到MySQL
性能监控数据默认会输出到两张表,performance_current(当前表)和performance(历史表)。
// 输出结果数据到MySQL
out.out(list);
2
- 性能监控结果数据必要属性说明
属性名 | 必选/可选 | 属性类型 | 属性说明 |
---|---|---|---|
ciCode | 必选 | String | 性能监控对象唯一标识 |
metric | 必选 | String | 性能监控数据的指标名称 |
instance | 必选 | String | 性能监控对象下属实例,若无则填英文字符下划线,"_" |
value | 必选 | String | 性能监控数据的值 |
timestamp | 必选 | String | 性能监控数据数据采集时间,时间戳格式 |
默认MySQL表结构
performance_current(当前表)
CREATE TABLE `performance_current` (
`ID` bigint(16) NOT NULL COMMENT '主键ID',
`CI_ID` decimal(16,0) DEFAULT NULL COMMENT '对象ID',
`CI_NAME` varchar(50) DEFAULT NULL COMMENT 'ci名称',
`CI_CLASS_ID` decimal(16,0) DEFAULT NULL COMMENT 'ci分类id',
`CI_CLASS_NAME` varchar(50) DEFAULT NULL COMMENT 'ci分类名称',
`CI_TYPE` decimal(2,0) DEFAULT NULL COMMENT 'CI=1,关系=2',
`INSTANCE` varchar(500) DEFAULT NULL COMMENT '实例',
`VAL` varchar(100) DEFAULT NULL COMMENT '值',
`KPI_ID` decimal(16,0) DEFAULT NULL COMMENT 'KPIID',
`KPI_NAME` varchar(50) DEFAULT NULL COMMENT 'kpi名称',
`KPI_CLASS_ID` decimal(16,0) DEFAULT NULL COMMENT 'kpi分类ID',
`KPI_CLASS_NAME` varchar(50) DEFAULT NULL COMMENT 'kpi分类名称',
`GROUP_KEY` varchar(100) DEFAULT NULL COMMENT '组合key',
`UNIT` varchar(20) DEFAULT NULL COMMENT '所属单位',
`DESCRIPTION` varchar(100) DEFAULT NULL COMMENT '描述',
`TIME` decimal(16,0) DEFAULT NULL COMMENT 'YYYYMMDDHHMISS',
`CREATE_TIME` decimal(16,0) NOT NULL COMMENT 'YYYYMMDDHHMISS',
`MODIFY_TIME` decimal(16,0) NOT NULL COMMENT 'YYYYMMDDHHMISS',
`DELETE_IDENTIFIER` varchar(200) DEFAULT NULL,
`DOMAIN_ID` bigint(16) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`),
KEY `INDEX_CI_NAME_KPI_NAME` (`CI_NAME`,`KPI_NAME`),
KEY `INDEX_PREF_CURR_DELETE_IDENTIFIER` (`DELETE_IDENTIFIER`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
performance(历史表)
CREATE TABLE `performance` (
`ID` decimal(16,0) NOT NULL COMMENT '主键ID',
`CI_ID` decimal(16,0) DEFAULT NULL COMMENT '对象ID',
`CI_NAME` varchar(50) DEFAULT NULL COMMENT 'ci名称',
`CI_CLASS_ID` decimal(16,0) DEFAULT NULL COMMENT 'ci分类id',
`CI_CLASS_NAME` varchar(50) DEFAULT NULL COMMENT 'ci分类名称',
`CI_TYPE` decimal(2,0) DEFAULT NULL COMMENT 'CI=1,关系=2',
`INSTANCE` varchar(500) DEFAULT NULL COMMENT '实例',
`VAL` varchar(100) DEFAULT NULL COMMENT '值',
`KPI_ID` decimal(16,0) DEFAULT NULL COMMENT 'KPIID',
`KPI_NAME` varchar(50) DEFAULT NULL COMMENT 'kpi名称',
`KPI_CLASS_ID` decimal(16,0) DEFAULT NULL COMMENT 'kpi分类ID',
`KPI_CLASS_NAME` varchar(50) DEFAULT NULL COMMENT 'kpi分类名称',
`GROUP_KEY` varchar(100) DEFAULT NULL COMMENT '组合key',
`UNIT` varchar(20) DEFAULT NULL COMMENT '所属单位',
`DESCRIPTION` varchar(100) DEFAULT NULL COMMENT '描述',
`TIME` decimal(16,0) DEFAULT NULL COMMENT 'YYYYMMDDHHMISS',
`CREATE_TIME` decimal(16,0) NOT NULL COMMENT 'YYYYMMDDHHMISS',
`MODIFY_TIME` decimal(16,0) NOT NULL COMMENT 'YYYYMMDDHHMISS',
`DOMAIN_ID` bigint(16) NOT NULL DEFAULT '1',
KEY `INDEX_CI_NAME_KPI_NAME` (`CI_NAME`,`KPI_NAME`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 3. DIP实例的保存与启动
配置信息填写完成后,点击保存,成功保存后会在森数据DIX的数据集成页面看到接入的DIP实例。
点击启动按钮,即可开始获取数据。
名词解释
已接入:当前数据接口接入到的总数据量
处理中:当前数据接口正在进行处理的数据量
发送中:当前数据接口正在向外部发送的数据量
已发送:当前数据接口发送到外部的总数据量
- 点击日志按钮,即可查看日志中成功接收到客户端日志信息。
# 4. HttpClient获取事件相关说明
- 事件结果数据必要属性说明
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
Severity | 必选 | String | 告警级别,值为1、2、3、4;其中4为最低级报警,1为最高级报警 |
Summary | 必选 | String | 告警事件描述信息 |
LastOccurrence | 必选 | String | 告警时间,格式:"yyyy-MM-dd HH:mm:ss" |
Status | 必选 | String | 告警事件是否开启标识 (OPEN:开启,CLOSE:关闭) |
SourceID | 必选 | String | 告警不同来源标识 (BMC、Tivoli、xbrother) |
SourceIdentifier | 必选 | String | 监控源事件用于标示唯一的压缩标识字段,若无则填空字符"" |
SourceEventID | 必选 | String | 监控数据源的事件序列号或其他主键字段 |
SourceCIName | 必选 | String | 监控数据源标示事件发生对象配置项的唯一标示,如设备名、主机名或IP等 |
SourceAlertKey | 必选 | String | 告警指标的唯一标示 |
SourceSeverity | 必选 | String | 监控数据源的原始告警级别 |
- 事件结果数据样例
[
{
"Summary": "CPU使用率高于86%,设备负载过高(来源于:BP2)",
"SourceAlertKey": "CPU使用率",
"SourceSeverity": "Critical",
"SourceIdentifier": "Identifier",
"SourceEventID": "1455867577750",
"Severity": "3",
"LastOccurrence": "2018-08-19 17:18:23",
"SourceCIName": "192.168.123.191",
"Status": "1",
"SourceID":"2"
}
]
2
3
4
5
6
7
8
9
10
11
12
13
14
- 默认MySQL表结构
CREATE TABLE `MON_EAP_EVENT_MEMORY` (
`ID` varchar(128) NOT NULL,
`IDENTIFIER` varchar(255) NOT NULL,
`SERIAL` varchar(128) NOT NULL,
`SEVERITY` int(11) NOT NULL,
`SUMMARY` varchar(2048) NOT NULL,
`FIRSTOCCURRENCE` datetime DEFAULT '2023-01-01 00:00:00',
`LASTOCCURRENCE` datetime DEFAULT '2023-01-01 00:00:00',
`STATECHANGE` datetime DEFAULT '2023-01-01 00:00:00',
`TALLY` int(11) NOT NULL,
`ACKNOWLEDGED` int(11) NOT NULL DEFAULT '0',
`STATUS` int(11) NOT NULL DEFAULT '1',
`GRADE` int(11) NOT NULL DEFAULT '0',
`SERVERNAME` varchar(64) DEFAULT NULL,
`SERVERSERIAL` varchar(64) DEFAULT NULL,
`SOURCEID` int(11) NOT NULL,
`SOURCENAME` varchar(128) DEFAULT NULL,
`SOURCEIDENTIFIER` varchar(512) DEFAULT NULL,
`SOURCEEVENTID` varchar(128) DEFAULT NULL,
`SOURCECINAME` varchar(255) DEFAULT NULL,
`SOURCEALERTKEY` varchar(255) DEFAULT NULL,
`SOURCESEVERITY` varchar(20) DEFAULT NULL,
`SOURCESUMMARY` varchar(1024) DEFAULT NULL,
`ACKINFO` varchar(255) DEFAULT NULL,
`ACKTIME` datetime DEFAULT NULL,
`ACKUID` varchar(64) DEFAULT NULL,
`CLOSEINFO` varchar(255) DEFAULT NULL,
`CLOSETIME` datetime DEFAULT NULL,
`CLOSEUID` varchar(64) DEFAULT NULL,
`KPIID` varchar(255) DEFAULT NULL,
`KPINAME` varchar(255) DEFAULT NULL,
`KPICATEGORYID` varchar(255) DEFAULT NULL,
`KPICATEGORYNAME` varchar(255) DEFAULT NULL,
`KPIDESCRIPTION` varchar(512) DEFAULT NULL,
`KPIINSTANCE` varchar(128) DEFAULT NULL,
`KPITYPE` varchar(255) DEFAULT NULL,
`KPIITEM` varchar(255) DEFAULT NULL,
`KPIDOMAIN` varchar(255) DEFAULT NULL,
`KPIUNIT` varchar(64) DEFAULT NULL,
`CIID` varchar(255) DEFAULT NULL,
`CINAME` varchar(255) DEFAULT NULL,
`CIPRIMARYKEY` varchar(512) DEFAULT NULL,
`CICATEGORYID` varchar(255) DEFAULT NULL,
`CICATEGORYNAME` varchar(255) DEFAULT NULL,
`CITYPE` varchar(255) DEFAULT NULL,
`CIITEM` varchar(255) DEFAULT NULL,
`CIAPPLICATION` varchar(255) DEFAULT NULL,
`CIOWNER` varchar(64) DEFAULT NULL,
`CIMGMTTEAM` varchar(128) DEFAULT NULL,
`CIDATACENTER` varchar(128) DEFAULT NULL,
`CILOCATION` varchar(255) DEFAULT NULL,
`CISTATUS` varchar(64) DEFAULT NULL,
`CIUSAGETYPE` varchar(64) DEFAULT NULL,
`CIMGMTGROUP` varchar(128) DEFAULT NULL,
`CIDEPLOYUNIT` varchar(128) DEFAULT NULL,
`BLACKOUT` decimal(2,0) NOT NULL DEFAULT '0',
`ALARMSMS` int(11) DEFAULT '0',
`ALARMEMAIL` int(11) DEFAULT '0',
`ALARMTICKET` int(11) DEFAULT '0',
`ALARMWORKFLOW` int(11) DEFAULT '0',
`DUPLICATESERIAL` varchar(128) NOT NULL,
`MAPERIODID` decimal(16,0) DEFAULT NULL,
`EVENTTITLE` varchar(255) DEFAULT NULL,
`FILTERTYPE` decimal(2,0) NOT NULL DEFAULT '0',
`SCENE` varchar(255) DEFAULT NULL,
`VIEWID` varchar(255) DEFAULT NULL,
`IFNOTIFY` decimal(2,0) NOT NULL DEFAULT '0',
`DURATION` varchar(32) DEFAULT NULL,
`TAG` int(11) DEFAULT NULL,
`CREATE_TIME` decimal(16,0) NOT NULL DEFAULT '0',
`MODIFY_TIME` decimal(16,0) NOT NULL DEFAULT '0',
`OLDSEVERITY` int(11) NOT NULL DEFAULT '1',
`DOMAINID` bigint(16) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`),
UNIQUE KEY `IDX_UNIQUE_IDENTIFIER` (`IDENTIFIER`),
KEY `INDEX_SERIAL` (`SERIAL`),
KEY `INDEX_LASTOCCURRENCE` (`LASTOCCURRENCE`) USING BTREE,
KEY `INDEX_SOURCEEVENTID_ID` (`SOURCEEVENTID`,`SOURCEID`) USING BTREE
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 5. 其它输出方式说明
- ActiveMQ
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的Activemq,即可添加Activemq输出代码模板。
var ActivemqOut = Java.type("com.uinnova.di.common.producer.amq.AMQProducer");
/**
* 初始化Activemq连接
* @param url Activemq地址 (tcp://0.0.0.0:61616)
* @param username 用户名
* @param password 密码
* @param queue 队列模式 (queue or topic)
* @param queueName 队列名称
* @param deliveryMode 非持久化或持久化 (1非持久化, 2持久化, 默认1非持久化)
*
*/
var out = ActivemqOut.getInstance("url", "username", "password", "queue", "queueName", 1);
/**
* 发送数据
* @param sendData 需要发送的数据 (数据类型 List<Map<String,Object>>)
*/
out.sendList(sendData);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ActivemqOut.getInstance参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | Activemq地址 (tcp://0.0.0.0:61616) |
username | 必选 | String | 用户名 |
password | 必选 | String | 密码 |
queue | 必选 | String | 队列模式 (queue or topic) |
queueName | 必选 | String | 队列或主题名称 |
deliveryMode | 必选 | int | 非持久化或持久化 (1:非持久化,2:持久化,默认1非持久化) |
RocketMQ
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的Rocketmq,即可添加Rocketmq输出代码模板。
var RocketMQProducer = Java.type("com.uinnova.di.common.producer.rocketmq.RocketMQProducer"); /** * 初始化Rocketmq连接 * @param url rocketmq服务地址 (0.0.0.0:9876;0.0.0.0:9876) 多个地址之间用分号隔开 * @param instanceName 生产者实例名称 * @param producerGroup 生产者组别 * @param topicName 主题名称 * @param tag 消息标签 * @param sendTimeOut 超时时间 默认30000毫秒 * @param charset 编码集 默认UTF-8 * */ var producer = RocketMQProducer.getInstance("url", "instanceName", "producerGroup", "topicName", "tag", "30000", "UTF-8"); // 同步发送 producer.send("test synchronous send"); // 异步发送 producer.sendCallBack("test asynchronous send"); // 单向发送 producer.sendOneWay("test one way send");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18RocketMQProducer.getInstance参数说明:
参数名 必选/可选 参数类型 参数说明 url 必选
String rocketmq服务地址 (0.0.0.0:9876;0.0.0.0:9876) 多个地址之间用分号隔开 instanceName 必选
String 生产者实例名称 producerGroup 必选
String 生产者组别 topicName 必选
String 主题名称 tag 必选
String 消息标签 sendTimeOut 必选
String 超时时间 默认30000毫秒 charset 必选
String 编码集 默认UTF-8 RabbitMQ
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的RabbitMQ,即可添加RabbitMQ输出代码模板。
var RabbitMQProducer = Java.type("com.uinnova.di.common.producer.rabbitmq.RabbitMQProducer"); var HashMap = Java.type("java.util.HashMap"); /** * 初始化Rabbitmq连接 * @param url Rabbitmq地址 (0.0.0.0) * @param port 端口号 (默认5672) * @param username 用户名 * @param password 密码 */ var RMQ = new RabbitMQProducer("url", port, "username", "password"); /** * 发送数据 (发送模式分为四种: 简单模式, 订阅模式, 路由模式, topic模式) * @param modelMap 模式集合 (集合类型 Map<String,String>), 不同模式传递不同参数按以下规范传参即可 * - 简单模式 modelMap.put("model","simple") modelMap.put("name","队列名称") * - 订阅模式 modelMap.put("model","subscribe") modelMap.put("name","交换机名称") * - 路由模式 modelMap.put("model","routing") modelMap.put("name","交换机名称") modelMap.put("routingKey","路由键") * - topic模式 modelMap.put("model","topic") modelMap.put("name","交换机名称") modelMap.put("routingKey","路由键") * @param durable 交换机是否持久化 (true:持久化, false:不持久化) || 队列是否持久化 (true:持久化, false:不持久化) (简单模式) * @param autoDelete 无服务使用时是否自动删除交换机 (true:删除, false:不删除) || 无服务使用时是否自动删除队列 (true:删除, false:不删除) (简单模式) * @param sendData 需要发送的数据 (数据类型 Object) */ var modelMap = new HashMap(); RMQ.sendByModel(modelMap, false, false, "test sendData");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23RabbitMQProducer参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | MQ地址 |
port | 必选 | int | MQ端口号 |
username | 必选 | String | 用户名 |
password | 必选 | String | 密码 |
sendByModel参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
modelMap | 必选 | Map<String,String> | 模式集合 (分为四种模式:简单模式、订阅模式、路由模式、topic模式) 简单模式 modelMap.put("model","simple") modelMap.put("name","队列名称") 订阅模式 modelMap.put("model","subscribe") modelMap.put("name","交换机名称") 路由模式 modelMap.put("model","routing") modelMap.put("name","交换机名称") modelMap.put("routingKey","路由键") topic模式 modelMap.put("model","topic") modelMap.put("name","交换机名称") modelMap.put("routingKey","路由键") |
durable | 必选 | boolean | 交换机或队列是否持久化 (true:持久化, false:不持久化) |
autoDelete | 必选 | boolean | 是否自动删除队列或交换机 (true:删除,false:不删除) |
sendData | 必选 | Object | 发送数据 |
Kafka
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的Kafka,即可添加Kafka输出代码模板。
var KafkaUtil = Java.type("com.uinnova.di.common.producer.kafka.DIKafkaProducer"); /** * 初始化Kafka连接 * @param hosts Kafka服务地址 (0.0.0.0:9092, 多个地址之间用,隔开) * @param messageTopic 消息主题 */ var kafka = KafkaUtil.getInstance("hosts", "messageTopic"); /** * 发送数据 * @param sendData 需要发送的数据 (数据类型 List<Map<String,Object>>) */ kafka.sendList(sendData);
1
2
3
4
5
6
7
8
9
10
11
12KafkaUtil.getInstance参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
hosts | 必选 | String | 服务器ip:端口号,集群用逗号分隔,如:0.0.0.0:9092,0.0.0.1:9092,0.0.0.2:9092 |
messageTopic | 必选 | String | 消息主题名称 |
kafka.sendList参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
sendData | 必选 | List<Map<String,Object>> | 发送数据 |
MQTT
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的MQTT,即可添加MQTT输出代码模板。
var MQTTSender = Java.type("com.uinnova.di.common.producer.mqtt.MQTTProducer"); /** * 初始化Mqtt连接 * @param url Mqtt地址 (tcp://0.0.0.0:1883) * @param clientID 客户端ID * @param username 用户名 (若无用户名填写"") * @param password 密码 (若无密码填写"") */ var mqttSender = MQTTSender.getInstance("url", "clientID", "username", "password"); try { /** * 消息发送 * @param messageTopic 消息主题 * @param message 需要发送的消息 (String类型) * @param QoS 服务质量 (可填 0:最多分发一次, 1:至少分发一次, 2:仅分发一次, 默认填写2) * @param charset 字符编码集 (默认填写utf-8) */ var messageSend = mqttSender.publishMessage("messageTopic", "message", 2, "utf-8"); if (messageSend) { heartBeat.addOutCount(1); logger.info("消息发送成功!"); } else { logger.error("消息发送失败!"); } } catch (error) { logger.error("脚本执行错误:" + error.message); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27MQTTSender.getInstance参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | mqttBroker连接地址,如:tcp://0.0.0.0:1883 |
clientID | 必选 | String | 连接的客户端标识 |
username | 必选 | String | 用户名 |
password | 必选 | String | 密码 |
mqttSender.publishMessage参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
messageTopic | 必选 | String | 消息主题 |
message | 必选 | String | 发送的数据 |
QoS | 必选 | int | 消息发送质量:0-至多一次可能会出现丢包的现象,性能最高; 1-至少一次,保证包会到达目的地,但是可能出现重包,性能其次; 2-正好一次,保证包会到达目的地,且不会出现重包的现象,性能最低 |
charset | 必选 | String | 字符串编码格式 |
- ElasticSearch
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的ES,即可添加ES输出代码模板。
var ESOut = Java.type("com.uinnova.di.common.out.ESOut");
/**
* 初始化elasticsearch连接
* @param url elasticsearch地址
* @param dataType 数据类型 (1:性能数据, 2:告警数据)
* @param username 用户名
* @param password 密码
* @param day 性能数据保留天数 (注: 当参数dataType值为2即是告警数据类型时, 此参数不生效告警数据不会被清除)
*/
var url = "0.0.0.0:9200";
var dataType = 1;
var username = "";
var password = "";
var day = 7;
var out = new ESOut(url, dataType, username, password, day);
/**
* 发送数据
* @param sendData 需要发送的数据 (数据类型 List<Map<String,Object>>)
*/
out.out(sendData);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ESOut参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | ElasticSearch连接地址,集群以分号隔开,如:0.0.0.0:9200;0.0.0.1:9200;0.0.0.2:9200 |
dataType | 必选 | int | 性能监控数据(1) or 事件数据(2) |
username | 必选 | String | ES访问用户名,如ES没有设置用户名密码可以传空字符串 |
password | 必选 | String | ES访问密码如ES没有设置用户名密码可以传空字符串 |
day | 必选 | int | 性能监控数据保留历史数据天数 |
domainId | 可选 | long | 域ID |
性能监控数据输出结果样例:
当前性能监控数据索引名-performance
历史性能监控数据索引名-performance-yyyyMMdd
{
"_index": "performance",
"_type": "performance",
"_id": "温湿度1_温度__",
"_version": 4,
"_score": 1,
"_source": {
"val": "17.37",
"unit": "℃",
"instance": "_",
"kpi_name": "温度",
"create_time": 20211105101017,
"ci_name": "温湿度1",
"modify_time": 20211105101017,
"description": "",
"time": 1636078217645,
"id": "温湿度1_温度__",
"CIObject": {},
"desc": "_"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
事件数据输出结果样例:
事件数据索引名-event
{
"_index": "event",
"_type": "event",
"_id": "192.168.123.191_CPU使用率_Identifier",
"_version": 3,
"_score": 1,
"_source": {
"acknowledged": 0,
"SourceSeverity": "Critical",
"firstoccurrence": "2018-08-19T09:18:23.000Z",
"modify_time": 20211216111428,
"sourceidentifier": "Identifier",
"ciPrimaryKey": "",
"lastoccurrence": "2018-08-19T09:18:23.000Z",
"sourceciname": "192.168.123.191",
"id": "192.168.123.191_CPU使用率_Identifier",
"ciname": "192.168.123.191",
"severity": 3,
"summary": "CPU使用率高于86%,设备负载过高(来源于:BP2)",
"sourceid": 2,
"identifier": "192.168.123.191_CPU使用率_Identifier",
"sourceeventid": "1455867577750",
"create_time": 20211216111241,
"sourceseverity": "Critical",
"duplicateserial": "407365857456064",
"statechange": "2021-12-16T03:14:28.000Z",
"serial": "407365857456064",
"sourcealertkey": "CPU使用率",
"kpiname": "CPU使用率",
"tally": 3,
"CIObject": {},
"status": 1
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
DB
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的DBOUT,即可添加DB输出代码模板。
var RDBOut = Java.type("com.uinnova.di.common.out.RDBOut"); var dbType = "MYSQL"; // 数据库类型:MYSQL/ORACLE/DB2/SYBASE/SQLSERVER/POSTGRESQL var username = "root"; // 数据库用户名 var password = "Dix@2019"; // 数据库密码 var url = ""; // 数据库连接串 var rdbOut = new RDBOut(dbType, url, username, password); var tableName = "tableName"; // 数据库表名 var datas = new java.util.ArrayList(); // List<Map> 数据的属性名称要和数据库表字段名称对应 var batch = 500; // 批量保存的数据条数 var result = rdbOut.out(tableName, datas, batch); // 返回保存成功的数据条数 logger.info(result);
1
2
3
4
5
6
7
8
9
10
11
12
13RDBOUT参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
dbType | 必选 | String | 数据库类型 |
url | 必选 | int | 数据库连接串 |
username | 必选 | String | 数据库用户名 |
password | 必选 | String | 数据库密码 |
HttpPost
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的HttpPost,即可添加HttpPost输出代码模板。
var HttpClient = Java.type("com.uinnova.di.dicom.util.HTTPClient"); // url, headers, param, charset /** * @param url * @param header Content-Type支持的类型有: * multipart/form-data * application/x-www-form-urlencoded * application/json * application/xml * text/plain * text * @param param 当Content-Type是text/plain 或者 text,参数的数据结构是字符串类型 * 当Content-Type为其他时, 参数为Map类型 * @param charset 编码集 */ var headers = new java.util.HashMap(); headers.put("Content-Type", "application/json"); // 请求头指定ContentType var bodyParam = new java.util.HashMap(); // 示例中Content-Type 指定 application/json, 因此参数使用Map格式 bodyParam.put("hello", "dix") var result = HttpClient.doPost("url", headers, bodyParam, "UTF-8");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
doPost方法参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | 请求地址 |
headers | 必选 | Map | 请求头 |
param | 必选 | Map/String | 请求体 |
charset | 必选 | String | 编码集 |
HttpsPost
在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的HttpsPost,即可添加HttpsPost输出代码模板。
var HttpClient = Java.type("com.uinnova.di.dicom.util.HTTPClient"); /** * @param url * @param header Content-Type支持的类型有: * multipart/form-data * application/x-www-form-urlencoded * application/json * application/xml * text/plain * text * @param param 当Content-Type是text/plain 或者 text,参数的数据结构是字符串类型 * 当Content-Type为其他时, 参数为Map类型 * @param charset 编码集 * @param ssl ssl 自定义SSL 版本 例如: "TLSv1.0", "TLSv1.1", "TLSv1.2" * 若不填该参数时, 默认值为TLSv1.2 */ var headers = new java.util.HashMap(); headers.put("Content-Type", "application/json"); // 请求头指定ContentType var bodyParam = new java.util.HashMap(); // 示例中Content-Type 指定 application/json, 因此参数使用Map格式 bodyParam.put("hello", "dix"); var result = HttpClient.doPost("url", headers, bodyParam, "UTF-8", "TLSv1.2");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
doPost方法参数说明:
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
url | 必选 | String | 请求地址 |
headers | 必选 | Map | 请求头 |
param | 必选 | Map/String | 请求体 |
charset | 必选 | String | 编码集 |
ssl | 必选 | String | 自定义ssl协议 |
# 6.针对优锘ThingJS-X、DCV(Galileo)、Tarsier系列产品的CI关联丰富处理
请参照: 标准规范-ThingJS-X集成标准规范、Tarsier服务集成标准规范