diff --git a/features/measurements/impl/src/main/java/org/opennms/netmgt/measurements/impl/AbstractRrdBasedFetchStrategy.java b/features/measurements/impl/src/main/java/org/opennms/netmgt/measurements/impl/AbstractRrdBasedFetchStrategy.java index 849396de23ed..7a7494672ae6 100644 --- a/features/measurements/impl/src/main/java/org/opennms/netmgt/measurements/impl/AbstractRrdBasedFetchStrategy.java +++ b/features/measurements/impl/src/main/java/org/opennms/netmgt/measurements/impl/AbstractRrdBasedFetchStrategy.java @@ -78,6 +78,7 @@ public FetchResults fetch(long start, long end, long step, int maxrows, final Map constants = Maps.newHashMap(); final List resources = new ArrayList<>(); + final List additionalResources = new ArrayList<>(); final Map rrdsBySource = Maps.newHashMap(); @@ -98,7 +99,18 @@ public FetchResults fetch(long start, long end, long step, int maxrows, final OnmsResource resource = resourceCache.computeIfAbsent(resourceId, r -> m_resourceDao.getResourceById(r)); if (resource == null) { - if (relaxed) continue; + if (relaxed) { + // Attempt to get parent resource, e.g. the node, to put into response metadata + final OnmsResource parentResource = resourceCache.computeIfAbsent(resourceId, r -> m_resourceDao.getResourceById(r.getParent())); + + if (parentResource != null) { + final QueryResource parentResourceInfo = getResourceInfo(parentResource, source); + additionalResources.add(parentResourceInfo); + } + + continue; + } + LOG.error("No resource with id: {}", source.getResourceId()); resources.add(null); return null; @@ -133,6 +145,10 @@ public FetchResults fetch(long start, long end, long step, int maxrows, rrdsBySource.put(source, rrdFile); } + if (!additionalResources.isEmpty()) { + resources.addAll(additionalResources); + } + // Fetch return fetchMeasurements(start, end, step, maxrows, rrdsBySource, constants, sources, new QueryMetadata(resources), relaxed); }