Search in sources :

Example 11 with Status

use of org.opennms.features.topology.api.topo.Status in project opennms by OpenNMS.

the class AlarmStatusProvider method getStatusForVertices.

@Override
public Map<VertexRef, Status> getStatusForVertices(VertexProvider vertexProvider, Collection<VertexRef> vertices, Criteria[] criteria) {
    Map<VertexRef, Status> returnMap = new HashMap<VertexRef, Status>();
    // split nodes from groups and others
    // nodes
    List<VertexRef> nodeRefs = getNodeVertexRefs(vertexProvider, vertices, criteria);
    // groups
    List<VertexRef> otherRefs = getOtherVertexRefs(vertices);
    Map<Integer, VertexRef> nodeIdMap = extractNodeIds(nodeRefs);
    // calculate status for ALL nodes
    Map<Integer, AlarmSummary> nodeIdToAlarmSummaryMap = getAlarmSummaries(nodeIdMap.keySet());
    // status for all known node ids
    for (Integer eachNodeId : nodeIdMap.keySet()) {
        AlarmSummary summary = nodeIdToAlarmSummaryMap.get(eachNodeId);
        AlarmStatus status = summary == null ? createDefaultStatus() : createStatus(summary);
        VertexRef ref = nodeIdMap.get(eachNodeId);
        returnMap.put(ref, status);
        LoggerFactory.getLogger(getClass()).debug("Status for node '{}' with id '{}' is: {}", ref.getLabel(), ref.getId(), status);
    }
    // calculate status for groups and nodes which are neither group nor node
    for (VertexRef eachRef : otherRefs) {
        if (isGroup(eachRef)) {
            List<AlarmSummary> alarmSummariesForGroup = new ArrayList<>();
            List<Vertex> children = vertexProvider.getChildren(eachRef, criteria);
            for (Vertex eachChildren : children) {
                AlarmSummary eachChildrenAlarmSummary = nodeIdToAlarmSummaryMap.get(eachChildren.getNodeID());
                if (eachChildrenAlarmSummary != null) {
                    alarmSummariesForGroup.add(eachChildrenAlarmSummary);
                }
            }
            AlarmStatus groupStatus = calculateAlarmStatusForGroup(alarmSummariesForGroup);
            returnMap.put(eachRef, groupStatus);
        } else {
            returnMap.put(eachRef, createDefaultStatus());
        }
    }
    return returnMap;
}
Also used : DefaultStatus(org.opennms.features.topology.api.topo.DefaultStatus) Status(org.opennms.features.topology.api.topo.Status) Vertex(org.opennms.features.topology.api.topo.Vertex) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) AlarmSummary(org.opennms.netmgt.model.alarm.AlarmSummary) VertexRef(org.opennms.features.topology.api.topo.VertexRef)

Example 12 with Status

use of org.opennms.features.topology.api.topo.Status in project opennms by OpenNMS.

the class NCSEdgeStatusProvider method getStatusForEdges.

@Override
public Map<EdgeRef, Status> getStatusForEdges(EdgeProvider edgeProvider, Collection<EdgeRef> edges, Criteria[] criteria) {
    List<EdgeRef> ncsEdges = new ArrayList<EdgeRef>(Collections2.filter(edges, new Predicate<EdgeRef>() {

        @Override
        public boolean apply(EdgeRef edgeRef) {
            return edgeRef.getNamespace().equals("ncs");
        }
    }));
    Set<String> alarms = getNCSImpactedAlarms();
    Map<EdgeRef, Status> statusMap = new HashMap<EdgeRef, Status>();
    for (EdgeRef edge : ncsEdges) {
        NCSEdgeProvider.NCSEdge e = (NCSEdgeProvider.NCSEdge) edge;
        e.setStatus("up");
        statusMap.put(edge, new NCSLinkStatus("up"));
        if (alarms.contains(e.getSourceElementName()) || alarms.contains(e.getTargetElementName())) {
            statusMap.put(edge, new NCSLinkStatus("down"));
            e.setStatus("down");
        }
    }
    return statusMap;
}
Also used : Status(org.opennms.features.topology.api.topo.Status) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Predicate(com.google.common.base.Predicate) EdgeRef(org.opennms.features.topology.api.topo.EdgeRef)

Example 13 with Status

use of org.opennms.features.topology.api.topo.Status in project opennms by OpenNMS.

the class PathOutageProvider method getDefaults.

@Override
public Defaults getDefaults() {
    // semantic zoom level 0 and the node with the worst state; or for the first node (if all nodes have state NORMAL)
    return new Defaults().withSemanticZoomLevel(0).withPreferredLayout("Hierarchy Layout").withCriteria(() -> {
        Map<VertexRef, Status> resultMap = statusProvider.getStatusForVertices(this, Lists.newArrayList(this.getVertices()), new Criteria[0]);
        Optional<Map.Entry<VertexRef, Status>> max = resultMap.entrySet().stream().max(Comparator.comparing(e -> OnmsSeverity.get(e.getValue().computeStatus())));
        if (max.isPresent()) {
            return Lists.newArrayList(new VertexHopGraphProvider.DefaultVertexHopCriteria(max.get().getKey()));
        } else if (this.getVertexTotalCount() > 0) {
            return Lists.newArrayList(new VertexHopGraphProvider.DefaultVertexHopCriteria(this.getVertices().get(0)));
        } else {
            return Lists.newArrayList();
        }
    });
}
Also used : Status(org.opennms.features.topology.api.topo.Status) NodeDao(org.opennms.netmgt.dao.api.NodeDao) Collection(java.util.Collection) AbstractTopologyProvider(org.opennms.features.topology.api.topo.AbstractTopologyProvider) DirectedSparseGraph(edu.uci.ics.jung.graph.DirectedSparseGraph) AbstractVertex(org.opennms.features.topology.api.topo.AbstractVertex) Collectors(java.util.stream.Collectors) VertexHopGraphProvider(org.opennms.features.topology.api.support.VertexHopGraphProvider) ArrayList(java.util.ArrayList) List(java.util.List) Lists(com.google.common.collect.Lists) Map(java.util.Map) Criteria(org.opennms.features.topology.api.topo.Criteria) Defaults(org.opennms.features.topology.api.topo.Defaults) EdgeType(edu.uci.ics.jung.graph.util.EdgeType) Optional(java.util.Optional) SelectionChangedListener(org.opennms.features.topology.api.browsers.SelectionChangedListener) AbstractEdge(org.opennms.features.topology.api.topo.AbstractEdge) Status(org.opennms.features.topology.api.topo.Status) Comparator(java.util.Comparator) VertexRef(org.opennms.features.topology.api.topo.VertexRef) ContentType(org.opennms.features.topology.api.browsers.ContentType) OnmsNode(org.opennms.netmgt.model.OnmsNode) OnmsSeverity(org.opennms.netmgt.model.OnmsSeverity) Defaults(org.opennms.features.topology.api.topo.Defaults) VertexHopGraphProvider(org.opennms.features.topology.api.support.VertexHopGraphProvider) VertexRef(org.opennms.features.topology.api.topo.VertexRef)

Example 14 with Status

use of org.opennms.features.topology.api.topo.Status in project opennms by OpenNMS.

the class PathOutageStatusProviderIT method verify.

@Test
public /**
 * This method tests if the {@link PathOutageStatusProvider} retrieves alarm data correctly
 */
void verify() throws UnknownHostException {
    this.pathOutageStatusProvider = new PathOutageStatusProvider(this.genericPersistenceAccessor);
    this.pathOutageProvider = new PathOutageProvider(this.nodeDao, this.pathOutageStatusProvider);
    this.pathOutageProvider.refresh();
    // Very basic test - check that PathOutageStatusProvider finds a Status for each vertex
    // and that all these statuses are at the moment NORMAL
    Map<VertexRef, Status> stats = this.calculateStatuses();
    for (VertexRef vertex : stats.keySet()) {
        Assert.assertNotNull(stats.get(vertex));
        Assert.assertEquals(OnmsSeverity.NORMAL.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
    }
    // Also check that the PathOutageProvider calculates the default focus strategy correctly
    // the list of criteria should always contain exactly 1 vertex (with the worst status)
    List<Criteria> criteria = this.pathOutageProvider.getDefaults().getCriteria();
    Assert.assertNotNull(criteria);
    Assert.assertEquals(1, criteria.size());
    // Adding a single path outage with MINOR severity.
    // PathOutageStatusProvider should be able to find this outage + all other nodes should have a state NORMAL
    this.outageDao.save(createOutage(EventConstants.NODE_DOWN_EVENT_UEI, address_1, this.nodeDao.get(1), OnmsSeverity.MINOR));
    stats = this.calculateStatuses();
    for (VertexRef vertex : stats.keySet()) {
        Assert.assertNotNull(stats.get(vertex));
        if (vertex.getId().equalsIgnoreCase("1")) {
            Assert.assertEquals(OnmsSeverity.MINOR.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
        } else {
            Assert.assertEquals(OnmsSeverity.NORMAL.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
        }
    }
    // List of criteria should contain exactly 1 vertex (with the worst status, meaning that its id should be 1)
    criteria = this.pathOutageProvider.getDefaults().getCriteria();
    Assert.assertNotNull(criteria);
    Assert.assertEquals(1, criteria.size());
    VertexHopGraphProvider.DefaultVertexHopCriteria criterion = (VertexHopGraphProvider.DefaultVertexHopCriteria) criteria.get(0);
    Assert.assertEquals("1", criterion.getId());
    // Adding a MAJOR path outage to the same node.
    // PathOutageStatusProvider should display the alarm with a MAJOR severity level
    this.outageDao.save(createOutage(EventConstants.NODE_DOWN_EVENT_UEI, address_1, this.nodeDao.get(1), OnmsSeverity.MAJOR));
    stats = this.calculateStatuses();
    for (VertexRef vertex : stats.keySet()) {
        Assert.assertNotNull(stats.get(vertex));
        if (vertex.getId().equalsIgnoreCase("1")) {
            Assert.assertEquals(OnmsSeverity.MAJOR.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
            break;
        }
    }
    // List of criteria should contain exactly 1 vertex (with the worst status, meaning that its id should still be 1)
    criteria = this.pathOutageProvider.getDefaults().getCriteria();
    Assert.assertNotNull(criteria);
    Assert.assertEquals(1, criteria.size());
    criterion = (VertexHopGraphProvider.DefaultVertexHopCriteria) criteria.get(0);
    Assert.assertEquals("1", criterion.getId());
    // Adding several more path outages of different types
    // PathOutageStatusProvider should display them all, plus the one from the previous test
    this.outageDao.save(createOutage(EventConstants.NODE_LOST_SERVICE_EVENT_UEI, address_2, this.nodeDao.get(2), OnmsSeverity.MINOR));
    this.outageDao.save(createOutage(EventConstants.INTERFACE_DOWN_EVENT_UEI, address_3, this.nodeDao.get(3), OnmsSeverity.MINOR));
    this.outageDao.save(createOutage(EventConstants.PATH_OUTAGE_EVENT_UEI, address_4, this.nodeDao.get(4), OnmsSeverity.MAJOR));
    stats = this.calculateStatuses();
    for (VertexRef vertex : stats.keySet()) {
        Assert.assertNotNull(stats.get(vertex));
        if (vertex.getId().equalsIgnoreCase("1")) {
            Assert.assertEquals(OnmsSeverity.MAJOR.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
        } else if (vertex.getId().equalsIgnoreCase("2")) {
            Assert.assertEquals(OnmsSeverity.MINOR.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
        } else if (vertex.getId().equalsIgnoreCase("3")) {
            Assert.assertEquals(OnmsSeverity.MINOR.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
        } else if (vertex.getId().equalsIgnoreCase("4")) {
            Assert.assertEquals(OnmsSeverity.MAJOR.getLabel().toLowerCase(), stats.get(vertex).computeStatus().toLowerCase());
        }
    }
    // List of criteria should contain exactly 1 vertex (with the worst status, meaning that its id should be either 1 or 4)
    criteria = this.pathOutageProvider.getDefaults().getCriteria();
    Assert.assertNotNull(criteria);
    Assert.assertEquals(1, criteria.size());
    criterion = (VertexHopGraphProvider.DefaultVertexHopCriteria) criteria.get(0);
    Assert.assertTrue(criterion.getId().equalsIgnoreCase("1") || criterion.getId().equalsIgnoreCase("4"));
}
Also used : Status(org.opennms.features.topology.api.topo.Status) VertexHopGraphProvider(org.opennms.features.topology.api.support.VertexHopGraphProvider) Criteria(org.opennms.features.topology.api.topo.Criteria) VertexRef(org.opennms.features.topology.api.topo.VertexRef) Test(org.junit.Test)

Example 15 with Status

use of org.opennms.features.topology.api.topo.Status in project opennms by OpenNMS.

the class VmwareStatusProvider method getStatusForVertices.

@Override
public Map<VertexRef, Status> getStatusForVertices(VertexProvider vertexProvider, Collection<VertexRef> vertices, Criteria[] criteria) {
    final List<AbstractVertex> vmwareVertices = vertices.stream().filter(v -> v.getNamespace().equals(getNamespace())).map(v -> (AbstractVertex) v).collect(Collectors.toList());
    // All vertices associated with a node id
    final Map<Integer, VertexRef> nodeIdMap = vmwareVertices.stream().filter(v -> v.getNodeID() != null).collect(Collectors.toMap(AbstractVertex::getNodeID, Function.identity()));
    // Alarm summary for each node id
    final Map<Integer, AlarmSummary> nodeIdToAlarmSummaryMap = getAlarmSummaries(nodeIdMap.keySet());
    // Set the result
    Map<VertexRef, Status> resultMap = Maps.newHashMap();
    for (AbstractVertex eachVertex : vmwareVertices) {
        AlarmSummary alarmSummary = nodeIdToAlarmSummaryMap.get(eachVertex.getNodeID());
        if (alarmSummary != null) {
            resultMap.put(eachVertex, new DefaultStatus(alarmSummary.getMaxSeverity().getLabel(), 0));
        }
    }
    return resultMap;
}
Also used : AbstractVertex(org.opennms.features.topology.api.topo.AbstractVertex) AlarmSummary(org.opennms.netmgt.model.alarm.AlarmSummary) Collection(java.util.Collection) Set(java.util.Set) AbstractVertex(org.opennms.features.topology.api.topo.AbstractVertex) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) Maps(com.google.common.collect.Maps) ArrayList(java.util.ArrayList) Objects(java.util.Objects) DefaultStatus(org.opennms.features.topology.api.topo.DefaultStatus) List(java.util.List) StatusProvider(org.opennms.features.topology.api.topo.StatusProvider) VertexProvider(org.opennms.features.topology.api.topo.VertexProvider) AlarmDao(org.opennms.netmgt.dao.api.AlarmDao) Map(java.util.Map) Criteria(org.opennms.features.topology.api.topo.Criteria) Status(org.opennms.features.topology.api.topo.Status) VertexRef(org.opennms.features.topology.api.topo.VertexRef) DefaultStatus(org.opennms.features.topology.api.topo.DefaultStatus) Status(org.opennms.features.topology.api.topo.Status) DefaultStatus(org.opennms.features.topology.api.topo.DefaultStatus) AlarmSummary(org.opennms.netmgt.model.alarm.AlarmSummary) VertexRef(org.opennms.features.topology.api.topo.VertexRef)

Aggregations

Status (org.opennms.features.topology.api.topo.Status)26 ArrayList (java.util.ArrayList)17 VertexRef (org.opennms.features.topology.api.topo.VertexRef)15 Test (org.junit.Test)14 Criteria (org.opennms.features.topology.api.topo.Criteria)14 List (java.util.List)13 Map (java.util.Map)13 Collectors (java.util.stream.Collectors)12 Lists (com.google.common.collect.Lists)10 StatusProvider (org.opennms.features.topology.api.topo.StatusProvider)9 OnmsSeverity (org.opennms.netmgt.model.OnmsSeverity)9 AlarmSummary (org.opennms.netmgt.model.alarm.AlarmSummary)9 Collection (java.util.Collection)8 Objects (java.util.Objects)7 AbstractVertex (org.opennms.features.topology.api.topo.AbstractVertex)7 EdgeRef (org.opennms.features.topology.api.topo.EdgeRef)7 VertexProvider (org.opennms.features.topology.api.topo.VertexProvider)7 GraphMLServiceAccessor (org.opennms.features.topology.plugins.topo.graphml.internal.GraphMLServiceAccessor)6 Paths (java.nio.file.Paths)5 Date (java.util.Date)5