public int sendAlarm(final AlarmInfo alarmInfo) {
    AlarmType type = alarmInfo.type;
    String id = alarmInfo.getId();
    String extraInfo = alarmInfo.getExtraInfo();

    if (terminationToken.isToShutdown()) {
      // 记录告警信息
      System.err.println("rejected alarm:" + id + "," + extraInfo);
      return -1;
    }

    int duplicateSubmissionCount = 0;
    try {

      AtomicInteger prevSubmittedCounter;

      prevSubmittedCounter =
          submittedAlarmRegistry.putIfAbsent(
              type.toString() + ':' + id + '@' + extraInfo, new AtomicInteger(0));
      if (null == prevSubmittedCounter) {
        terminationToken.reservations.incrementAndGet();
        alarmQueue.put(alarmInfo);
      } else {

        // 故障未恢复,不用重复发送告警信息给服务器,故仅增加计数
        duplicateSubmissionCount = prevSubmittedCounter.incrementAndGet();
      }
    } catch (Throwable t) {
      t.printStackTrace();
    }

    return duplicateSubmissionCount;
  }
Beispiel #2
0
 public AlarmInfo calculateMostImportantAlarm(
     RouteDataObject ro, Location loc, MetricsConstants mc, boolean showCameras) {
   float mxspeed = ro.getMaximumSpeed();
   AlarmInfo speedAlarm = createSpeedAlarm(mc, mxspeed, loc);
   if (speedAlarm != null) {
     voiceRouter.announceAlarm(speedAlarm);
     return speedAlarm;
   }
   for (int i = 0; i < ro.getPointsLength(); i++) {
     int[] pointTypes = ro.getPointTypes(i);
     RouteRegion reg = ro.region;
     if (pointTypes != null) {
       for (int r = 0; r < pointTypes.length; r++) {
         RouteTypeRule typeRule = reg.quickGetEncodingRule(pointTypes[r]);
         AlarmInfo info = AlarmInfo.createAlarmInfo(typeRule, 0);
         if (info != null) {
           if (info.getType() != AlarmInfoType.SPEED_CAMERA || showCameras) {
             voiceRouter.announceAlarm(info);
             return info;
           }
         }
       }
     }
   }
   return null;
 }
Beispiel #3
0
  public static void main(String[] args) throws InterruptedException {

    AlarmMgr alarmMgr = AlarmMgr.getInstance();
    alarmMgr.init();

    String alarmId = "0000000010";
    AlarmInfo alarmInfo1 = new AlarmInfo(alarmId, AlarmType.FAULT);
    alarmInfo1.setExtraInfo("key1=value1;key2=value2");
    alarmMgr.sendAlarm(alarmInfo1);

    Thread.sleep(80);

    AlarmInfo alarmInfo2 = new AlarmInfo(alarmId, AlarmType.RESUME);
    alarmInfo2.setExtraInfo("key1=value1;key2=value2");
    alarmMgr.sendAlarm(alarmInfo2);

    Thread.sleep(600);
  }
  @Override
  protected void doRun() throws Exception {
    AlarmInfo alarm;
    alarm = alarmQueue.take();
    terminationToken.reservations.decrementAndGet();

    try {
      // 将告警信息发送至告警服务器
      alarmAgent.sendAlarm(alarm);
    } catch (Exception e) {
      e.printStackTrace();
    }

    /*
     * 处理恢复告警:将相应的故障告警从注册表中删除, 使得相应故障恢复后若再次出现相同故障,该故障信息能够上报到服务器
     */
    if (AlarmType.RESUME == alarm.type) {
      String key = AlarmType.FAULT.toString() + ':' + alarm.getId() + '@' + alarm.getExtraInfo();
      submittedAlarmRegistry.remove(key);

      key = AlarmType.RESUME.toString() + ':' + alarm.getId() + '@' + alarm.getExtraInfo();
      submittedAlarmRegistry.remove(key);
    }
  }
Beispiel #5
0
 private static AlarmInfo createSpeedAlarm(MetricsConstants mc, float mxspeed, Location loc) {
   AlarmInfo speedAlarm = null;
   if (mxspeed != 0
       && loc != null
       && loc.hasSpeed()
       && mxspeed != RouteDataObject.NONE_MAX_SPEED) {
     float delta = 5f / 3.6f;
     if (loc.getSpeed() > mxspeed + delta) {
       int speed;
       if (mc == MetricsConstants.KILOMETERS_AND_METERS) {
         speed = Math.round(mxspeed * 3.6f);
       } else {
         speed = Math.round(mxspeed * 3.6f / 1.6f);
       }
       speedAlarm = AlarmInfo.createSpeedLimit(speed);
     }
   }
   return speedAlarm;
 }