use of org.opennms.netmgt.bsm.service.model.edge.IpServiceEdge in project opennms by OpenNMS.
the class BusinessServiceGraphImpl method addBusinessServiceVertex.
private GraphVertex addBusinessServiceVertex(BusinessService businessService) {
// Use an existing vertex if we already created one
GraphVertex businessServiceVertex = m_verticesByBusinessServiceId.get(businessService.getId());
if (businessServiceVertex != null) {
return businessServiceVertex;
}
// Create
businessServiceVertex = new GraphVertexImpl(businessService.getReduceFunction(), businessService);
// Add
addVertex(businessServiceVertex);
// Index
m_verticesByBusinessServiceId.put(businessService.getId(), businessServiceVertex);
for (Edge edge : businessService.getEdges()) {
// Create the edge
GraphEdge graphEdge = new GraphEdgeImpl(edge);
// Use an existing vertex if we already created one
final GraphVertex[] vertexForEdge = { getExistingVertex(edge) };
// If we couldn't find an existing vertex, create one
if (vertexForEdge[0] == null) {
edge.accept(new EdgeVisitor<Void>() {
@Override
public Void visit(ChildEdge edge) {
vertexForEdge[0] = addBusinessServiceVertex(edge.getChild());
return null;
}
@Override
public Void visit(IpServiceEdge edge) {
// There are multiple reductions keys for this edge
// Create an intermediary vertex using the Most Critical reduction function
vertexForEdge[0] = new GraphVertexImpl(REDUCE_HIGHEST_SEVERITY, edge.getIpService());
addVertex(vertexForEdge[0]);
m_verticesByIpServiceId.put(vertexForEdge[0].getIpService().getId(), vertexForEdge[0]);
// SPECIAL CASE: Map the reductions keys to the intermediary vertex using the Identity map
for (String reductionKey : edge.getReductionKeys()) {
GraphVertex reductionKeyVertex = m_verticesByReductionKey.get(reductionKey);
if (reductionKeyVertex == null) {
// not already added
reductionKeyVertex = new GraphVertexImpl(REDUCE_HIGHEST_SEVERITY, reductionKey);
addVertex(reductionKeyVertex);
m_verticesByReductionKey.put(reductionKey, reductionKeyVertex);
}
// Always add an edge
GraphEdgeImpl intermediaryEdge = new GraphEdgeImpl(MAP_IDENTITY);
addEdge(intermediaryEdge, vertexForEdge[0], reductionKeyVertex);
}
return null;
}
@Override
public Void visit(ReductionKeyEdge edge) {
String reductionKey = edge.getReductionKey();
vertexForEdge[0] = new GraphVertexImpl(REDUCE_HIGHEST_SEVERITY, edge.getReductionKey());
addVertex(vertexForEdge[0]);
m_verticesByReductionKey.put(reductionKey, vertexForEdge[0]);
return null;
}
});
}
// Link and index
addEdge(graphEdge, businessServiceVertex, vertexForEdge[0]);
m_verticesByEdgeId.put(edge.getId(), vertexForEdge[0]);
m_edgesByEdgeId.put(edge.getId(), graphEdge);
}
return businessServiceVertex;
}
use of org.opennms.netmgt.bsm.service.model.edge.IpServiceEdge in project opennms by OpenNMS.
the class BusinessServiceManagerImplIT method testGetOperationalStatusForBusinessService.
@Test
public void testGetOperationalStatusForBusinessService() {
BusinessService bsService1 = createBusinessService("Dummy Business Service");
BusinessService bsService2 = createBusinessService("Another Dummy Business Service");
businessServiceStateMachine.setBusinessServices(Lists.newArrayList(bsService1, bsService2));
final IpService ipServiceWithId5 = getIpService(5);
final IpService ipServiceWithId6 = getIpService(6);
// no ip services attached
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService2));
// ip services attached
businessServiceManager.addIpServiceEdge(bsService1, ipServiceWithId5, new Identity(), Edge.DEFAULT_WEIGHT);
businessServiceManager.addIpServiceEdge(bsService2, ipServiceWithId6, new Identity(), Edge.DEFAULT_WEIGHT);
bsService1.save();
bsService2.save();
businessServiceDao.flush();
Assert.assertFalse("Services are equal but should not", Objects.equals(bsService1, bsService2));
businessServiceStateMachine.setBusinessServices(Lists.newArrayList(bsService1, bsService2));
// should not have any effect
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService2));
// attach NORMAL alarm to service 1
final IpServiceEdge ipServiceEdgeOnBsService1 = bsService1.getIpServiceEdges().iterator().next();
businessServiceStateMachine.handleNewOrUpdatedAlarm(createAlarmWrapper(monitoredServiceDao.get(5), OnmsSeverity.NORMAL));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(ipServiceEdgeOnBsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService2));
// attach INDETERMINATE alarm to service 1
businessServiceStateMachine.handleNewOrUpdatedAlarm(createAlarmWrapper(monitoredServiceDao.get(5), OnmsSeverity.INDETERMINATE));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(ipServiceEdgeOnBsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService2));
// attach WARNING alarm to service 1
businessServiceStateMachine.handleNewOrUpdatedAlarm(createAlarmWrapper(monitoredServiceDao.get(5), OnmsSeverity.WARNING));
Assert.assertEquals(Status.WARNING, businessServiceManager.getOperationalStatus(ipServiceEdgeOnBsService1));
Assert.assertEquals(Status.WARNING, businessServiceManager.getOperationalStatus(bsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService2));
// attach CRITICAL alarm to service 1
businessServiceStateMachine.handleNewOrUpdatedAlarm(createAlarmWrapper(monitoredServiceDao.get(5), OnmsSeverity.CRITICAL));
Assert.assertEquals(Status.CRITICAL, businessServiceManager.getOperationalStatus(ipServiceEdgeOnBsService1));
Assert.assertEquals(Status.CRITICAL, businessServiceManager.getOperationalStatus(bsService1));
Assert.assertEquals(Status.NORMAL, businessServiceManager.getOperationalStatus(bsService2));
}
use of org.opennms.netmgt.bsm.service.model.edge.IpServiceEdge in project opennms by OpenNMS.
the class BusinessServiceRestService method getById.
@GET
@Path("{id}")
public Response getById(@PathParam("id") Long id) {
BusinessService service = getManager().getBusinessServiceById(id);
final BusinessServiceResponseDTO response = new BusinessServiceResponseDTO();
response.setId(service.getId());
response.setName(service.getName());
response.setAttributes(service.getAttributes());
response.setLocation(ResourceLocationFactory.createBusinessServiceLocation(service.getId().toString()));
response.setParentServices(service.getParentServices().stream().map(BusinessService::getId).collect(Collectors.toSet()));
response.setOperationalStatus(service.getOperationalStatus());
response.setReduceFunction(transform(service.getReduceFunction()));
service.getEdges().forEach(eachEdge -> eachEdge.accept(new EdgeVisitor<Void>() {
@Override
public Void visit(IpServiceEdge edge) {
response.getIpServices().add(transform(edge));
return null;
}
@Override
public Void visit(ReductionKeyEdge edge) {
response.getReductionKeys().add(transform(edge));
return null;
}
@Override
public Void visit(ChildEdge edge) {
response.getChildren().add(transform(edge));
return null;
}
}));
return Response.ok(response).build();
}
use of org.opennms.netmgt.bsm.service.model.edge.IpServiceEdge in project opennms by OpenNMS.
the class BusinessServiceManagerImpl method addIpServiceEdge.
@Override
public boolean addIpServiceEdge(BusinessService businessService, IpService ipService, MapFunction mapFunction, int weight, String friendlyName) {
final BusinessServiceEntity parentEntity = getBusinessServiceEntity(businessService);
// Create the edge
final IpServiceEdge edge = createEdge(IpServiceEdge.class, businessService, mapFunction, weight);
edge.setIpService(ipService);
edge.setFriendlyName(friendlyName);
// if already exists, no update
final IPServiceEdgeEntity edgeEntity = getBusinessServiceEdgeEntity(edge);
long count = parentEntity.getIpServiceEdges().stream().filter(e -> e.equalsDefinition(edgeEntity)).count();
if (count > 0) {
return false;
}
parentEntity.addEdge(((IpServiceEdgeImpl) edge).getEntity());
return true;
}
use of org.opennms.netmgt.bsm.service.model.edge.IpServiceEdge in project opennms by OpenNMS.
the class BusinessServiceVertexStatusInfoPanelItemProvider method createComponent.
private Component createComponent(BusinessServiceVertex vertex, GraphContainer container) {
final FormLayout rootLayout = new FormLayout();
rootLayout.setSizeFull();
rootLayout.setSpacing(false);
rootLayout.setMargin(false);
rootLayout.addStyleName("severity");
final BusinessServiceStateMachine stateMachine = SimulationAwareStateMachineFactory.createStateMachine(businessServiceManager, container.getCriteria());
final Status overallStatus = BusinessServicesStatusProvider.getStatus(stateMachine, vertex);
rootLayout.addComponent(createStatusLabel("Overall", overallStatus));
rootLayout.addComponent(new Label());
final BusinessServiceGraph graph = stateMachine.getGraph();
final BusinessService businessService = businessServiceManager.getBusinessServiceById(vertex.getServiceId());
final Set<GraphVertex> impactingVertices = getImpactingVertices(stateMachine, graph, businessService);
for (final Edge edge : businessService.getEdges()) {
// Get the topology vertex for the child to determine the display label
final Vertex childVertex = businessServicesTopologyProvider.getVertex(edge.accept(new EdgeVisitor<VertexRef>() {
@Override
public VertexRef visit(final IpServiceEdge edge) {
return new IpServiceVertex(edge.getIpService(), 0);
}
@Override
public VertexRef visit(final ReductionKeyEdge edge) {
return new ReductionKeyVertex(edge.getReductionKey(), 0);
}
@Override
public VertexRef visit(final ChildEdge edge) {
return new BusinessServiceVertex(edge.getChild(), 0);
}
}));
final Status edgeStatus = stateMachine.getOperationalStatus(edge);
rootLayout.addComponent(createStatusLabel(childVertex.getLabel(), edgeStatus, String.format("%s × %d <i class=\"pull-right glyphicon %s\"></i>", edgeStatus.getLabel(), edge.getWeight(), impactingVertices.contains(graph.getVertexByEdgeId(edge.getId())) ? "glyphicon-flash" : "")));
}
return rootLayout;
}
Aggregations