From 8416ade105ed328e9fb61cf7ff7af5fdcded3536 Mon Sep 17 00:00:00 2001 From: Chandra Gorantla Date: Fri, 30 Aug 2024 19:27:16 -0400 Subject: [PATCH] NMS-16948: Add essential tags for latency resource Also add resource label for all metrics --- .../netmgt/collection/api/CollectionResource.java | 8 ++++++++ .../collection/api/LatencyCollectionResource.java | 14 ++++++++++++++ .../samplewrite/TimeseriesPersister.java | 5 +++++ .../LatencyStoringServiceMonitorAdaptor.java | 8 +++++++- 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/CollectionResource.java b/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/CollectionResource.java index cdf77fcc2ff2..a2fef10e8e8f 100644 --- a/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/CollectionResource.java +++ b/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/CollectionResource.java @@ -24,6 +24,9 @@ import org.opennms.netmgt.collection.support.DefaultTimeKeeper; import org.opennms.netmgt.model.ResourcePath; +import java.util.HashMap; +import java.util.Map; + /** *

CollectionResource interface.

* @@ -95,4 +98,9 @@ public interface CollectionResource extends ResourceIdentifier, CollectionVisita */ TimeKeeper getTimeKeeper(); + // Can be used to add additional tags required by TimeSeries like Prometheus + default Map getTags() { + return new HashMap<>(); + } + } diff --git a/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/LatencyCollectionResource.java b/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/LatencyCollectionResource.java index ff064b21dda4..9aaef4211355 100644 --- a/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/LatencyCollectionResource.java +++ b/features/collection/api/src/main/java/org/opennms/netmgt/collection/api/LatencyCollectionResource.java @@ -41,6 +41,8 @@ public class LatencyCollectionResource implements CollectionResource { private final String m_location; private final Map m_attributeGroups = Maps.newLinkedHashMap(); + private final Map m_tags = Maps.newHashMap(); + /** *

Constructor for LatencyCollectionResource.

* @@ -54,6 +56,13 @@ public LatencyCollectionResource(String serviceName, String ipAddress, String lo m_location = location; } + public LatencyCollectionResource(String serviceName, String ipAddress, String location, Map tags) { + m_serviceName = serviceName; + m_ipAddress = ipAddress; + m_location = location; + m_tags.putAll(tags); + } + /** *

getInstance

* @@ -197,4 +206,9 @@ public ResourcePath getParent() { public TimeKeeper getTimeKeeper() { return null; } + + @Override + public Map getTags() { + return m_tags; + } } diff --git a/features/timeseries/src/main/java/org/opennms/netmgt/timeseries/samplewrite/TimeseriesPersister.java b/features/timeseries/src/main/java/org/opennms/netmgt/timeseries/samplewrite/TimeseriesPersister.java index fb97c58b7691..4cfa0081e778 100644 --- a/features/timeseries/src/main/java/org/opennms/netmgt/timeseries/samplewrite/TimeseriesPersister.java +++ b/features/timeseries/src/main/java/org/opennms/netmgt/timeseries/samplewrite/TimeseriesPersister.java @@ -31,6 +31,7 @@ import org.opennms.core.cache.Cache; import org.opennms.integration.api.v1.timeseries.Tag; +import org.opennms.integration.api.v1.timeseries.immutables.ImmutableTag; import org.opennms.netmgt.collection.api.AbstractPersister; import org.opennms.netmgt.collection.api.AttributeGroup; import org.opennms.netmgt.collection.api.AttributeType; @@ -104,6 +105,10 @@ public void visitGroup(AttributeGroup group) { // Set the builder before any calls to persistNumericAttribute are made CollectionResource resource = group.getResource(); Set metaTags = getUserDefinedMetaTags(resource); + resource.getTags().forEach((key, value) -> metaTags.add(new ImmutableTag(key, value))); + if (resource.getInterfaceLabel() != null) { + metaTags.add(new ImmutableTag("resource_label", resource.getInterfaceLabel())); + } currentBuilder = new TimeseriesPersistOperationBuilder(writer, repository, resource, group.getName(), metaTags, resourceLevelStringAttributes, this.metricRegistry); if (resource.getTimeKeeper() != null) { diff --git a/opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/LatencyStoringServiceMonitorAdaptor.java b/opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/LatencyStoringServiceMonitorAdaptor.java index 42fec43232a7..33f2bd9fec01 100644 --- a/opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/LatencyStoringServiceMonitorAdaptor.java +++ b/opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/LatencyStoringServiceMonitorAdaptor.java @@ -24,6 +24,7 @@ import java.io.File; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; @@ -152,7 +153,12 @@ private CollectionSet getCollectionSet(MonitoredService service, Map tags = new HashMap<>(); + tags.put("node_id", Integer.toString(service.getNodeId())); + tags.put("node_label", service.getNodeLabel()); + tags.put("location", service.getNodeLocation()); + LatencyCollectionResource latencyResource = new LatencyCollectionResource(service.getSvcName(), service.getIpAddr(), service.getNodeLocation(), tags); for (final Entry entry : entries.entrySet()) { final String ds = entry.getKey(); final Number value = entry.getValue() != null ? entry.getValue() : Double.NaN;