@Transient @XmlTransient public Set<Integer> getRelatedAlarmIds() { return getRelatedAlarms().stream() .map(OnmsAlarm::getId) .collect(Collectors.toSet()); }
@Transient @XmlTransient public Integer getAffectedNodeCount() { if (m_associatedAlarms == null || m_associatedAlarms.isEmpty()) { return m_node == null ? 0 : 1; } Set<Integer> nodes = getRelatedAlarms().stream().map(OnmsAlarm::getNode).filter(Objects::nonNull).map(OnmsNode::getId).collect(Collectors.toSet()); // count the Situtation's node if it is different if (m_node != null) { nodes.add(m_node.getId()); } return nodes.size(); }
private boolean formingCyclicGraph(OnmsAlarm situation, OnmsAlarm relatedAlarm) { return situation.getReductionKey().equals(relatedAlarm.getReductionKey()) || relatedAlarm.getRelatedAlarms().stream().anyMatch(ra -> formingCyclicGraph(situation, ra)); }
public AlarmBean(OnmsAlarm alarm) { this.alarm = Objects.requireNonNull(alarm); this.attributes = alarm.getDetails() != null ? ImmutableMap.copyOf(alarm.getDetails()) : Collections.emptyMap(); this.node = alarm.getNode() != null ? new NodeBean(alarm.getNode()) : null; this.severity = ModelMappers.toSeverity(alarm.getSeverity()); this.relatedAlarms = alarm.getRelatedAlarms().stream().map(AlarmBean::new).collect(Collectors.toList()); this.lastEvent = ModelMappers.toEvent(alarm.getLastEvent()); }
@Override @Transactional public void deleteAlarm(OnmsAlarm alarm) { LOG.info("Deleting alarm with id: {} with severity: {}", alarm.getId(), alarm.getSeverity()); final OnmsAlarm alarmInTrans = alarmDao.get(alarm.getId()); if (alarmInTrans == null) { LOG.warn("Alarm disappeared: {}. Skipping delete.", alarm); return; } // If alarm was in Situation, calculate notifications for the Situation Map<OnmsAlarm, Set<OnmsAlarm>> priorRelatedAlarms = new HashMap<>(); if (alarmInTrans.isPartOfSituation()) { for (OnmsAlarm situation : alarmInTrans.getRelatedSituations()) { priorRelatedAlarms.put(situation, new HashSet<OnmsAlarm>(situation.getRelatedAlarms())); } } alarmDao.delete(alarmInTrans); // fire notifications after alarm has been deleted for (Entry<OnmsAlarm, Set<OnmsAlarm>> entry : priorRelatedAlarms.entrySet()) { alarmEntityNotifier.didUpdateRelatedAlarms(entry.getKey(), entry.getValue()); } alarmEntityNotifier.didDeleteAlarm(alarmInTrans); }
@AfterMapping protected void fillAlarm(OnmsAlarm alarm, @MappingTarget AlarmDTO alarmDTO) { final List<OnmsEventParameter> eventParms = alarm.getEventParameters(); if (eventParms != null) { alarmDTO.setParameters(eventParms.stream() .map(this::eventParameterToEventParameterDTO) .collect(Collectors.toList())); } if (alarm.getTTicketId() != null && !alarm.getTTicketId().isEmpty() && ticketUrlTemplate != null) { alarmDTO.setTroubleTicketLink(getTicketUrl(alarm.getTTicketId())); } // If there are no related alarms, we do not add them to the DTO and // the field will not be serialized. if (alarm.isSituation()) { alarmDTO.setRelatedAlarms(alarm.getRelatedAlarms().stream() .map(this::alarmToAlarmSummaryDTO) .sorted(Comparator.comparing(AlarmSummaryDTO::getId)) .collect(Collectors.toList())); } }
@AfterMapping protected void fillAlarm(OnmsAlarm alarm, @MappingTarget AlarmDTO alarmDTO) { final List<OnmsEventParameter> eventParms = alarm.getEventParameters(); if (eventParms != null) { alarmDTO.setParameters(eventParms.stream() .map(this::eventParameterToEventParameterDTO) .collect(Collectors.toList())); } if (alarm.getTTicketId() != null && !alarm.getTTicketId().isEmpty() && ticketUrlTemplate != null) { alarmDTO.setTroubleTicketLink(getTicketUrl(alarm.getTTicketId())); } // If there are no related alarms, we do not add them to the DTO and // the field will not be serialized. if (alarm.isSituation()) { alarmDTO.setRelatedAlarms(alarm.getRelatedAlarms().stream() .map(this::alarmToAlarmSummaryDTO) .sorted(Comparator.comparing(AlarmSummaryDTO::getId)) .collect(Collectors.toList())); } }
LOG.debug("processAck: Clearing ackable: {}...", ackable); if (isAlarm) { ((OnmsAlarm) ackable).getRelatedAlarms().forEach(relatedAlarm -> clearRelatedAlarm(relatedAlarm)); final OnmsSeverity previousSeverity = ackable.getSeverity(); callback = (alarm) -> alarmEntityNotifier.didUpdateAlarmSeverity(alarm, previousSeverity);
private void handleNewOrUpdatedAlarmNoLock(OnmsAlarm alarm) { final KieSession kieSession = getKieSession(); // Initialize any related objects that are needed for rule execution Hibernate.initialize(alarm.getRelatedAlarms()); if (alarm.getLastEvent() != null) { // The last event may be null in unit tests Hibernate.initialize(alarm.getLastEvent().getEventParameters()); } final AlarmAndFact alarmAndFact = alarmsById.get(alarm.getId()); if (alarmAndFact == null) { LOG.debug("Inserting alarm into session: {}", alarm); final FactHandle fact = getKieSession().insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } else { // Updating the fact doesn't always give us to expected results so we resort to deleting it // and adding it again instead LOG.trace("Deleting alarm from session (for re-insertion): {}", alarm); kieSession.delete(alarmAndFact.getFact()); // Reinsert LOG.trace("Re-inserting alarm into session: {}", alarm); final FactHandle fact = kieSession.insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } stateTracker.trackNewOrUpdatedAlarm(alarm.getId(), alarm.getReductionKey()); }
if (alarm.isSituation()) { ticket.setSituation(true); Set<OnmsAlarm> relatedAlarms = alarm.getRelatedAlarms(); populateRelatedAlarmsForTicket(ticket, relatedAlarms);
if (alarm.getRelatedAlarms() != null) { alarm.getRelatedAlarms().forEach(relatedAlarm -> builder.addRelatedAlarm(toAlarm(relatedAlarm)));
if (alarm.getRelatedAlarms() != null) { alarm.getRelatedAlarms().forEach(relatedAlarm -> builder.addRelatedAlarm(toAlarm(relatedAlarm)));