# HttpClient-JavaScript

JavaScript数据集成

简述

HttpClient-JavaScript DIP插件是通过编写JS脚本,发送HTTP请求来完成数据对接。在该类型DIP插件中我们可以通过调用函数库中的函数,来实现各类HTTP请求的发送。例如:GET、POST、PUT、DELETE等等。还可以将接收到的数据,通过简单的JS语法来进行数据格式转换,再输出到数据库、中间件等组件中,是一个使用频率相对较高的DIP插件。

# 1. 创建DIP实例说明

  • 名称: 填写用户自定义DIP实例名称。

JavaScript数据集成

  • Cron表达式: 填写Cron表达式,用于定期执行脚本代码
    DIPCron表达式配置

  • 脚本配置说明

初始界面如下图所示:

javascriptdipConfig

在脚本编辑区域内,将光标定位到待加入代码位置,点击标题栏相应代码模板,选择欲加入的代码模板块,如:输入代码模板模块中的GET方式发送请求即可自动添加代码块。

# 2. 代码详细说明

# 数据样例

[
    {
        "ciCode":"P211-E1-01",
        "metric":"CPU使用率",
        "instance":"cpu0",
        "value":"50",
        "timestamp":"1500790703007"
    }
]
1
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"
    }
}
1
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());
    }
}
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
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);
1
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());
    }
1
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);
1
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);
1
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;
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

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;
1
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实例。 保存DIP实例

  • 点击启动按钮,即可开始获取数据。

启动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"
    }
]
1
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;

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
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输出代码模板。

syslog-js-activemq-out

 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);   
1
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输出代码模板。

    syslog-js-rocketmq-out

     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
    18

    RocketMQProducer.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输出代码模板。

    syslog-js-rabbitmq-out

      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
    23

    RabbitMQProducer参数说明:

参数名 必选/可选 参数类型 参数说明
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输出代码模板。

    syslog-js-kafka-out

      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
    12

    KafkaUtil.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输出代码模板。

    syslog-js-mqtt-out

      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
    27

    MQTTSender.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输出代码模板。

syslog-js-es-out

  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);
1
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": "_"
	}
}
1
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
	}
}
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输出代码模板。

    syslog-js-es-out

      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
    13

    RDBOUT参数说明:

参数名 必选/可选 参数类型 参数说明
dbType 必选 String 数据库类型
url 必选 int 数据库连接串
username 必选 String 数据库用户名
password 必选 String 数据库密码
  • HttpPost

    在脚本编辑区域内,将光标定位到待加入代码位置。点击标题栏中的输出代码模板按钮,选择菜单栏中的HttpPost,即可添加HttpPost输出代码模板。

    syslog-js-es-out

      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输出代码模板。

    https-Post-out.png

        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服务集成标准规范

上次更新时间: 3/20/2023, 10:37:00 AM