Example #1
0
  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;
    }
  }
Example #2
0
  /**
   * 不记录历史数据的情况下统计告警,暂不使用
   *
   * @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;
    }
  }