use of org.opennms.features.topology.plugins.topo.graphml.status.GraphMLEdgeStatusProvider in project opennms by OpenNMS.
the class GraphMLEdgeStatusProviderIT method verify.
@Test
public void verify() throws Exception {
final GraphMLServiceAccessor serviceAccessor = new GraphMLServiceAccessor();
serviceAccessor.setTransactionOperations(transactionOperations);
serviceAccessor.setNodeDao(nodeDao);
serviceAccessor.setSnmpInterfaceDao(snmpInterfaceDao);
serviceAccessor.setMeasurementsService(request -> new QueryResponse());
final GraphMLGraph graph = GraphMLReader.read(getClass().getResourceAsStream("/test-graph2.xml")).getGraphs().get(0);
final GraphMLTopologyProvider topologyProvider = new GraphMLTopologyProvider(null, graph, serviceAccessor);
final GraphMLEdgeStatusProvider provider = new GraphMLEdgeStatusProvider(topologyProvider, new ScriptEngineManager(), serviceAccessor, Paths.get("src", "test", "opennms-home", "etc", "graphml-edge-status"));
assertThat(provider.contributesTo("acme:regions"), is(true));
assertThat(provider.getNamespace(), is("acme:regions"));
// Calculating the status executes some tests defined int the according scripts as a side effect
final EdgeRef edgeRef = topologyProvider.getEdge("acme:regions", "center_north");
final Map<? extends EdgeRef, ? extends Status> status = provider.getStatusForEdges(topologyProvider, ImmutableList.of(edgeRef), new Criteria[0]);
// Checking nodeID creation for vertices with only foreignSource/foreignID set
final VertexRef vertexRef = topologyProvider.getVertex("acme:regions", "west");
assertThat(vertexRef, is(notNullValue()));
assertThat(vertexRef, is(instanceOf(GraphMLVertex.class)));
assertThat(((GraphMLVertex) vertexRef).getNodeID(), is(4));
// Testing status merging from two scripts
assertThat(status, is(notNullValue()));
assertThat(status, is(hasEntry(edgeRef, new GraphMLEdgeStatus().severity(OnmsSeverity.WARNING).style("stroke", "pink").style("stroke-width", "3em"))));
}
use of org.opennms.features.topology.plugins.topo.graphml.status.GraphMLEdgeStatusProvider in project opennms by OpenNMS.
the class GraphMLMetaTopologyFactory method updated.
@Override
public void updated(String pid, @SuppressWarnings("rawtypes") Dictionary properties) throws ConfigurationException {
LOG.debug("updated(String, Dictionary) invoked");
String location = (String) properties.get(TOPOLOGY_LOCATION);
if (!m_serviceRegistration.containsKey(pid)) {
LOG.debug("Service with pid '{}' is new. Register {}", pid, GraphMLMetaTopologyProvider.class.getSimpleName());
final Dictionary<String, Object> metaData = new Hashtable<>();
metaData.put(Constants.SERVICE_PID, pid);
if (properties.get(LABEL) != null) {
metaData.put(LABEL, properties.get(LABEL));
}
// Expose the MetaTopologyProvider
try {
final GraphMLMetaTopologyProvider metaTopologyProvider = new GraphMLMetaTopologyProvider(m_serviceAccessor);
metaTopologyProvider.setTopologyLocation(location);
metaTopologyProvider.reload();
registerService(pid, MetaTopologyProvider.class, metaTopologyProvider, metaData);
// Create and register additional services
final Set<String> iconKeys = metaTopologyProvider.getGraphProviders().stream().map(GraphProvider::getNamespace).flatMap(eachNamespace -> metaTopologyProvider.getRawTopologyProvider(eachNamespace).getVertices().stream()).map(Vertex::getIconKey).filter(Objects::nonNull).collect(Collectors.toSet());
registerService(pid, IconRepository.class, new GraphMLIconRepository(iconKeys));
// Create an OSGi aware script engine manager
final ScriptEngineManager scriptEngineManager = new OSGiScriptEngineManager(m_bundleContext);
metaTopologyProvider.getGraphProviders().forEach(it -> {
// Find Topology Provider
final GraphMLTopologyProvider rawTopologyProvider = metaTopologyProvider.getRawTopologyProvider(it.getNamespace());
// EdgeStatusProvider
registerService(pid, EdgeStatusProvider.class, new GraphMLEdgeStatusProvider(rawTopologyProvider, scriptEngineManager, m_serviceAccessor));
// SearchProvider
registerService(pid, SearchProvider.class, new GraphMLSearchProvider(rawTopologyProvider));
// Vertex Status Provider
// Only add status provider if explicitly set in GraphML document
this.buildStatusProvider(metaTopologyProvider, scriptEngineManager, rawTopologyProvider).ifPresent(statusProvider -> registerService(pid, StatusProvider.class, statusProvider));
});
} catch (InvalidGraphException | IOException e) {
LOG.error("An error occurred while loading GraphMLTopology from file {}. Ignoring...", location, e);
}
} else {
LOG.warn("Service with pid '{}' updated. Updating is not supported. Ignoring...");
}
}
Aggregations