基础模块
设计模块:规则、触发条件、执行动作,其中执行动作根据不同的输出途径会再有不通的分表
规则类型
从大的方面考虑,触发条件配置可以分为:产品级、单设备、多设备
数据上传触发流程
在多设备、多测点数据综合判断的情况下,不能仅仅根据当前上传触发的设备数据得出结果,所以就需要考虑结合同级条件中的其它设备存储的最新数据进行判断 在这种情况下,会面临新的问题:
- 时间范围
一般综合判断的场景都是希望用来判断的数据几乎是在相同的时间,如果没有这个判断,可能会出现过时的数据加入判断,而得到非预期的判断结果。 解决办法就是增加scopeSeconds属性,以当前时间点进行判断同级条件的设备数据
LocalDateTime prTime = pData.getReceivedTime();
Duration d = Duration.between(measurements.getReceivedTime(), prTime);
long dL = d.toMillis();
if (dL < 0) {
dL = Math.abs(dL);
}
if (dL > scopeSeconds) {
log.debug("时间差大于设定时间差" + dkey);
return;
}
- 重复触发
这个问题主要是因为多线程的执行时机问题导致的 比如,如果设备A先存储数据再进行联动条件判断,那么就有可能在这个组合步骤的中间环节时,设备B的数据入库,而导致设备A和设备B生成两条告警 一种简单的做法就是直接在这里加入同步锁控制,使相关存储与判断串行化
|