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; }
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; }
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); } }
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; }