@student2018
2018-03-07T05:53:31.000000Z
字数 2588
阅读 563
设计文档
新HCE愿景是设计成为一个集中的数据处理中间件,接收数据,并根据配置的业务规则进行路由,可直接根据配置数据库信息进入数据库,也可以进入规则引擎处理后进入数据库。
后期会添加通用的数据存取功能。
数据规则
用途:此表用于存储数据加工的规则,可用于派生字段。
例如巡检数据,如何判断定是否通过标准,可在这里编写。
这些规则中的rule_esql会在程序中加载到规则引擎
字段名称 | 字段类型 | 字段描述 |
---|---|---|
规则ID | 字符串 | 整型 自增 |
规则类型 | 字符串 | 巡检 合规 配置管理 其他 |
产品名称 | 字符串 | 此规则应用于哪些产品 |
属性名称 | 字符串 | 产品的属性 |
规则名称中文 | 字符串 | 用于输出展示,方便人阅读 |
规则名称 | 字符串 | 规则名称 用于匹配规则 |
规则内容 | 字符串 | Esql内容 |
规则描述 | 字符串 | 字符串描述规则的用途 |
规则状态 | 整型 | 是否启用此规则过滤数据 |
mysql建表语句:
create table t_data_rules(
rule_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
rule_type varchar(50),
product varchar(50),
property varchar(50),
rule_name varchar(50),
rule_name_cn varchar(100),
rule_esql varchar(4000),
rule_desc varchar(4000),
sts int
)
这个第一条属于哪个业务的如何使用?
字段名称 | 字段类型 | 字段描述 |
---|---|---|
规则ID | 整型 | 自增 主键 |
产品名称 | 字符串 | 用于和输入的数据关联 |
属性名称 | 字符串 | 用于和输入的数据关联 |
属性类别 | 字符串 | 用于和输入的数据关联 |
数据规则ID | 字符串 | 逗号分隔,数据规则列表 |
存储类型 | 字符串 | MYSQL,new4j |
存储目标 | 字符串 | MYSQL:表名, new4j? |
处理方式 | 字符串 | 1.进入规则引擎 2.不修改直接进db 3.直接进db,支持动态添加列(未实现) |
规则状态 | 整型 | 是否启用规则 |
mysql建表语句:
create table t_meta_rules(
meta_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
product varchar(50),
property varchar(50),
property_type varchar(50),
rule_ids varchar(2000),
store_type varchar(100),
store_target varchar(4000),
handle_type int ,
sts int
)
新写一个用于处理路由规则的RouteRuleActor
数据输入: workerActor处理完的数据,格式为Map[String,AnyRef]
数据输出: 把数据转发给规则引擎或DBActor
处理逻辑:
使用一个Map来存储路由信息,
过来的数据,取其产品名称与产品属性,在map中找到对应的key,如果不存在,则忽略,并记录异常。
如果存在,则根据处理方式进行处理,如果是直接送到db,则直接给mysqlDBActor
发送消息,把表名和数据一同发送过去即可。
如果是使用规则引擎处理,则需要根据规则ID列表,把数据复制N份(每一个规则一份),发送给规则引擎处理。这里需要调整下原来用的数据结构。
除了传送要处理的原始数据,还需要把存储目标(表名)传送过去。
固定名称为tableName[key].
定义流和写规则的时候,不用管这一部分,在规则引擎里再添加一个数据结构,用来存储规则名称与表名的对应关系,也会动态更新。
字段名称 | 字段类型 | 字段描述 |
---|---|---|
ID | 整型 | 自增 主键 |
产品名称 | 字符串 | 表明是哪个硬件设备 |
属性名称 | 字符串 | 检测设备的哪个属性 |
属性值 | 字符串 | 检测的值 |
产品地址 | 字符串 | 多数情况下是指ip |
检查日期 | 日期 | 检测发生的时间 |
检查是否通过规则 | 字符串 | 检测的值 |
检查标准 | 字符串 | 判断标准 |
规则名称 | 字符串 | 规则名称 |
巡检类的模板是基于产品属性粒度的
字段名称 | 字段类型 | 字段描述 |
---|---|---|
ID | 整型 | 自增 主键 |
产品名称 | 字符串 | 表明是哪个硬件设备 |
属性名称 | 字符串 | 检测设备的哪个属性 |
属性值 | 字符串 | 检测的值 |
产品地址 | 字符串 | 多数情况下是指ip |
检查日期 | 日期 | 检测发生的时间 |
产品配置管理 属性收集的时候,不是一个属性一个属性做的,
往往同时把相关的多个属性一次收集过来;
但在前端展示的时候,有可能
对于一个产品的同一个属性,属性本身可能是复杂的,包含多个属性
如果是复杂属性,可以把检测的值本身存储为嵌套的json.
目前采用数据监听的方式,监听配置目录中文件的创建事件。
支持两种文件类型,一种是以.json为扩展名的内容为json的文件;
另一种是其他扩展名的,内容为符合xml格式的文件;
为了保持文件的完整性,创建文件的时候,有一定的技巧。
如果文件本身比较大,直接复制到监控目录可能会出问题,因为监听进程监听到文件创建,但是文件内容并没有完全写入,暂时程序中没有做相关处理。
解决方法是,复制大文件的时候,采用以.开头的文件名,待复制完成后再修改名字。例如
cp Test_large_file.json /data/aops/.test_large_file.json && mv .test_large_file.json test_large_file.json
何为大文件 暂没有明确的定义,建议都按照上述方式进行,这样更安全稳定
设计为可以接收post请求,把待传入的json或xml格式的内容作为参数传入。
暂时没有实现。
使用scala IDE 导入已经存在的maven项目即可
java -jar HCEngine.jar localhost 9090
java -jar HCEngine.jar --conf extconf.property localhost 9090
尝试加入规则引擎可以支持scala的功能,未实现