public void add(long data, int seq) { if (!enable) { return; } /* * 这两个值是兼容用户输入的上限值小于下限值设定的 * 但这时只写一个数时不好处理,不知道它是上限还是下限,所以恢复原来逻辑 */ double realUpperV = upperValue; double realLowerV = lowerValue; judgeToast(); // 上限小于下限会弹一次toast告警 // 需要做数据转换 double d = data / src.getCarry_l2d(); if (d > realUpperV) // 本次数据大于上限阈值 { if (isUpperRecordStarted) // 已开始记录过或持续次数为1 { int seqReduce = seq - lastUpperBeginSeq; if (seqReduce > duration && null != lastestWarning) // 持续超出阈值 { // 更新最后一次告警对象(延长告警结束seq为当前seq) lastestWarning.end = seq; } else if (seqReduce == duration) // 一次新的告警生成 { // TODO 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; upperWariningCount++; recordLastestWaring(lastUpperBeginSeq, seq); } } else if (!isUpperRecordStarted && duration == 1) // 直接记录为一次告警 { isUpperRecordStarted = true; lastUpperBeginSeq = seq; // TODO 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; upperWariningCount++; recordLastestWaring(lastUpperBeginSeq, seq); } else // 第一次超上限,需要持续观察 { isUpperRecordStarted = true; lastUpperBeginSeq = seq; } // 清理下限记录(因为一开始限定了下限不能大于上限) isLowerRecordStarted = false; lastLowerBeginSeq = -1; } else if (d < realLowerV) // 本次数据小于下限阈值 { if (isLowerRecordStarted) { int seqReduce = seq - lastLowerBeginSeq; if (seqReduce > duration && null != lastestWarning) // 持续超出阈值 { // 更新最后一次告警对象(延长告警结束seq为当前seq) lastestWarning.end = seq; } else if (seqReduce == duration) // 一次新的告警生成 { // TODO 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; lowerWariningCount++; recordLastestWaring(lastLowerBeginSeq, seq); } } else if (!isLowerRecordStarted && duration == 1) // 直接记录为一次告警 { isLowerRecordStarted = true; lastLowerBeginSeq = seq; // TODO 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; lowerWariningCount++; recordLastestWaring(lastLowerBeginSeq, seq); } else // 第一次超下限,需要持续观察 { isLowerRecordStarted = true; lastLowerBeginSeq = seq; } // 清理上限记录(因为一开始限定了下限不能大于上限) isUpperRecordStarted = false; lastUpperBeginSeq = -1; } else // 阈值内,重置告警 { isUpperRecordStarted = false; lastUpperBeginSeq = -1; isLowerRecordStarted = false; lastLowerBeginSeq = -1; } }
/** * 不记录历史数据的情况下统计告警,暂不使用 * * @param data */ public void add(long data) { if (!enable) { return; } double realUpperV = upperValue; double realLowerV = lowerValue; judgeToast(); // 上限小于下限会弹一次toast告警 // 需要做数据转换 double d = data / src.getCarry_l2d(); if (d > realUpperV) // 本次数据大于上限阈值 { durUpperTimes++; if (isUpperRecordStarted) // 已开始记录过或持续次数为1 { if (durUpperTimes == duration) // 一次新的告警生成 { // 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; upperWariningCount++; recordLastestWaring(-1, -1); } } else if (!isUpperRecordStarted && duration == 1) // 直接记录为一次告警 { isUpperRecordStarted = true; // 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; upperWariningCount++; recordLastestWaring(-1, -1); } else // 第一次超上限,需要持续观察 { isUpperRecordStarted = true; } } else if (d < realLowerV) // 本次数据小于下限阈值 { durLowerTimes++; if (isLowerRecordStarted) // 已开始记录过或持续次数为1 { if (durLowerTimes == duration) // 一次新的告警生成 { // 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; lowerWariningCount++; recordLastestWaring(-1, -1); } } else if (!isLowerRecordStarted && duration == 1) // 直接记录为一次告警 { isLowerRecordStarted = true; // 新告警,如在性能页面,需要在页面刷新后重置告警为false newWarning = true; lowerWariningCount++; recordLastestWaring(-1, -1); } else // 第一次超下限,需要持续观察 { isLowerRecordStarted = true; } } else // 阈值内,重置告警 { isUpperRecordStarted = false; lastUpperBeginSeq = -1; isLowerRecordStarted = false; lastLowerBeginSeq = -1; durUpperTimes = 0; durLowerTimes = 0; } }