use of org.opennms.features.topology.api.topo.StatusProvider in project opennms by OpenNMS.
the class DefaultTopologyService method getGraph.
@Override
public Graph getGraph(String metaTopologyId, String namespace, Criteria[] criteria, int semanticZoomLevel) {
Objects.requireNonNull(metaTopologyId);
Objects.requireNonNull(namespace);
Objects.requireNonNull(metaTopologyId);
Objects.requireNonNull(criteria);
if (semanticZoomLevel < 0) {
LOG.warn("Semantic Zoom Level was {}. Only values >= 0 are allowed, forcing it to be 1", semanticZoomLevel);
semanticZoomLevel = 0;
}
final GraphProvider graphProvider = getGraphProvider(metaTopologyId, namespace);
// Determine visible vertices and edges
final List<Vertex> displayVertices = new ArrayList<>();
for (Vertex v : graphProvider.getVertices(criteria)) {
int vzl = graphProvider.getSemanticZoomLevel(v);
if (vzl == semanticZoomLevel || (vzl < semanticZoomLevel && !graphProvider.hasChildren(v))) {
displayVertices.add(v);
}
}
final Collection<Edge> displayEdges = graphProvider.getEdges(criteria);
// Create graph object
final DefaultGraph graph = new DefaultGraph(displayVertices, displayEdges);
// Calculate status
final StatusProvider vertexStatusProvider = serviceLocator != null ? findVertexStatusProvider(graphProvider) : null;
final EdgeStatusProvider edgeStatusProvider = serviceLocator != null ? findEdgeStatusProvider(graphProvider) : null;
if (vertexStatusProvider != null) {
graph.setVertexStatus(vertexStatusProvider.getStatusForVertices(graphProvider, new ArrayList<>(displayVertices), criteria));
}
if (edgeStatusProvider != null) {
graph.setEdgeStatus(edgeStatusProvider.getStatusForEdges(graphProvider, new ArrayList<>(graph.getDisplayEdges()), criteria));
}
return graph;
}
use of org.opennms.features.topology.api.topo.StatusProvider 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(eachProvider -> eachProvider.getNamespace()).flatMap(eachNamespace -> metaTopologyProvider.getRawTopologyProvider(eachNamespace).getVertices().stream()).map(eachVertex -> eachVertex.getIconKey()).filter(eachIconKey -> eachIconKey != null).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 -> {
final GraphMLTopologyProvider rawTopologyProvider = metaTopologyProvider.getRawTopologyProvider(it.getNamespace());
registerService(pid, EdgeStatusProvider.class, new GraphMLEdgeStatusProvider(rawTopologyProvider, scriptEngineManager, m_serviceAccessor));
registerService(pid, SearchProvider.class, new GraphMLSearchProvider(rawTopologyProvider));
if (rawTopologyProvider.requiresStatusProvider()) {
GraphMLVertexStatusProvider statusProvider = new GraphMLVertexStatusProvider(rawTopologyProvider.getNamespace(), (nodeIds) -> m_serviceAccessor.getAlarmDao().getNodeAlarmSummariesIncludeAcknowledgedOnes(nodeIds));
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