use of org.opennms.netmgt.bsm.service.model.edge.ReductionKeyEdge 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.ReductionKeyEdge 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.ReductionKeyEdge 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