From 177c4325f2376eeb10c2c27669f46660b27a670c Mon Sep 17 00:00:00 2001 From: synqotik Date: Fri, 7 Jul 2023 11:23:43 -0400 Subject: [PATCH] NMS-15839: Measurements API: Include node metadata even if resource not found --- .../impl/AbstractRrdBasedFetchStrategy.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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); }