From 200207a593f09b545c060b4d6bd38bd98c94e466 Mon Sep 17 00:00:00 2001 From: Simon Johnson <2924684+simon622@users.noreply.github.com> Date: Mon, 11 Dec 2023 10:58:39 +0000 Subject: [PATCH 1/4] cascade bridge --- .../bridge/metrics/PerBridgeMetrics.java | 62 ++++++++++++------- .../hivemq/bridge/mqtt/BridgeMqttClient.java | 11 +++- 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java b/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java index f531ff165d..bd8e0d7a1f 100644 --- a/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java +++ b/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java @@ -19,11 +19,15 @@ import com.codahale.metrics.MetricRegistry; import com.hivemq.extension.sdk.api.annotations.NotNull; import com.hivemq.metrics.HiveMQMetrics; +import javassist.convert.TransformNew; + +import javax.sound.midi.VoiceStatus; +import java.util.HashSet; +import java.util.Set; public class PerBridgeMetrics { public static final String BRIDGE_PREFIX = HiveMQMetrics.HIVEMQ_PREFIX + "bridge"; - private final @NotNull Counter publishForwardSuccessCounter; private final @NotNull Counter publishForwardFailCounter; private final @NotNull Counter publishRemoteReceivedCounter; @@ -34,54 +38,65 @@ public class PerBridgeMetrics { private final @NotNull Counter remotePublishExcludedCounter; private final @NotNull Counter loopPreventionForwardDropCounter; private final @NotNull Counter loopPreventionRemoteDropCounter; + private final @NotNull Set metricNames = new HashSet<>(); public PerBridgeMetrics(final @NotNull String bridgeName, final @NotNull MetricRegistry metricRegistry) { - publishForwardSuccessCounter = - metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, bridgeName, "forward.publish", "count")); + publishForwardSuccessCounter = createBridgeCounter(metricRegistry, + bridgeName, + "forward.publish", + "count"); - publishForwardFailCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + publishForwardFailCounter = createBridgeCounter(metricRegistry, bridgeName, "forward.publish.failed", - "count")); + "count"); - publishRemoteReceivedCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + publishRemoteReceivedCounter = createBridgeCounter(metricRegistry, bridgeName, "remote.publish.received", - "count")); + "count"); - publishLocalReceivedCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + publishLocalReceivedCounter = createBridgeCounter(metricRegistry, bridgeName, "local.publish.received", - "count")); + "count"); - publishLocalSuccessCounter = - metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, bridgeName, "local.publish", "count")); + publishLocalSuccessCounter = createBridgeCounter(metricRegistry, + bridgeName, + "local.publish", + "count"); - publishLocalNoSubscriberCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + publishLocalNoSubscriberCounter = createBridgeCounter(metricRegistry, bridgeName, "local.publish.no-subscriber-present", - "count")); + "count"); - publishLocalFailCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + publishLocalFailCounter = createBridgeCounter(metricRegistry, bridgeName, "local.publish.failed", - "count")); + "count"); - remotePublishExcludedCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + remotePublishExcludedCounter = createBridgeCounter(metricRegistry, bridgeName, "forward.publish.excluded", - "count")); + "count"); - loopPreventionForwardDropCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + loopPreventionForwardDropCounter = createBridgeCounter(metricRegistry, bridgeName, "forward.publish.loop-hops-exceeded", - "count")); + "count"); - loopPreventionRemoteDropCounter = metricRegistry.counter(MetricRegistry.name(BRIDGE_PREFIX, + loopPreventionRemoteDropCounter = createBridgeCounter(metricRegistry, bridgeName, "remote.publish.loop-hops-exceeded", - "count")); + "count"); + } + + private Counter createBridgeCounter(final @NotNull MetricRegistry metricRegistry, @NotNull final String... names){ + final String metricName = MetricRegistry.name(BRIDGE_PREFIX, names); + metricNames.add(metricName); + return metricRegistry.counter(metricName); } public @NotNull Counter getPublishForwardSuccessCounter() { @@ -123,4 +138,9 @@ public PerBridgeMetrics(final @NotNull String bridgeName, final @NotNull MetricR public @NotNull Counter getLoopPreventionRemoteDropCounter() { return loopPreventionRemoteDropCounter; } + + public void clearAll(final @NotNull MetricRegistry metricRegistry){ + metricNames.forEach(metricRegistry::remove); + metricNames.clear(); + } } diff --git a/hivemq-edge/src/main/java/com/hivemq/bridge/mqtt/BridgeMqttClient.java b/hivemq-edge/src/main/java/com/hivemq/bridge/mqtt/BridgeMqttClient.java index e4d1cd6f65..6fc530f93d 100644 --- a/hivemq-edge/src/main/java/com/hivemq/bridge/mqtt/BridgeMqttClient.java +++ b/hivemq-edge/src/main/java/com/hivemq/bridge/mqtt/BridgeMqttClient.java @@ -54,6 +54,7 @@ import com.hivemq.edge.modules.api.events.model.Event; import com.hivemq.extension.sdk.api.annotations.NotNull; import com.hivemq.security.ssl.SslUtil; +import io.reactivex.internal.operators.completable.CompletableDoFinally; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,6 +82,7 @@ public class BridgeMqttClient { private final @NotNull ListeningExecutorService executorService; private final @NotNull PerBridgeMetrics perBridgeMetrics; private final @NotNull EventService eventService; + private final @NotNull MetricRegistry metricRegistry; private final AtomicBoolean connected = new AtomicBoolean(false); private final AtomicBoolean stopped = new AtomicBoolean(false); private final @NotNull List forwarders = Collections.synchronizedList(new ArrayList<>()); @@ -98,6 +100,7 @@ public BridgeMqttClient( this.bridge = bridge; this.bridgeInterceptorHandler = bridgeInterceptorHandler; this.eventService = eventService; + this.metricRegistry = metricRegistry; this.mqtt5Client = createClient(); executorService = MoreExecutors.newDirectExecutorService(); perBridgeMetrics = new PerBridgeMetrics(bridge.getId(), metricRegistry); @@ -282,8 +285,12 @@ private static List convertSubscriptions( } public void stop() { - stopped.set(true); - mqtt5Client.toAsync().disconnect(); + try { + stopped.set(true); + mqtt5Client.toAsync().disconnect(); + } finally { + perBridgeMetrics.clearAll(metricRegistry); + } } public @NotNull List createForwarders() { From aed292bd85ab30815a97f09066d72ccacc81deaa Mon Sep 17 00:00:00 2001 From: Simon Johnson <2924684+simon622@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:39:56 +0000 Subject: [PATCH 2/4] protocol adapter metrics --- .../bridge/metrics/PerBridgeMetrics.java | 2 ++ .../adapters/impl/AbstractProtocolAdapter.java | 5 +++++ .../metrics/ProtocolAdapterMetricsHelper.java | 18 +++++++++++++++++- .../modules/api/adapters/ProtocolAdapter.java | 7 +++++++ .../protocols/ProtocolAdapterManager.java | 2 ++ 5 files changed, 33 insertions(+), 1 deletion(-) diff --git a/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java b/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java index bd8e0d7a1f..391a43cfb9 100644 --- a/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java +++ b/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java @@ -19,6 +19,7 @@ import com.codahale.metrics.MetricRegistry; import com.hivemq.extension.sdk.api.annotations.NotNull; import com.hivemq.metrics.HiveMQMetrics; +import dagger.internal.Preconditions; import javassist.convert.TransformNew; import javax.sound.midi.VoiceStatus; @@ -140,6 +141,7 @@ private Counter createBridgeCounter(final @NotNull MetricRegistry metricRegistry } public void clearAll(final @NotNull MetricRegistry metricRegistry){ + Preconditions.checkNotNull(metricRegistry); metricNames.forEach(metricRegistry::remove); metricNames.clear(); } diff --git a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/impl/AbstractProtocolAdapter.java b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/impl/AbstractProtocolAdapter.java index 8ac935ff2b..00f98457a8 100644 --- a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/impl/AbstractProtocolAdapter.java +++ b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/impl/AbstractProtocolAdapter.java @@ -297,6 +297,11 @@ protected void setRuntimeStatus(@NotNull final RuntimeStatus runtimeStatus){ this.runtimeStatus.set(runtimeStatus); } + @Override + public void destroy() { + protocolAdapterMetricsHelper.clearAll(); + } + protected boolean running(){ return runtimeStatus.get() == RuntimeStatus.STARTED; } diff --git a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java index b98627ad9b..333dd38d9c 100644 --- a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java +++ b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java @@ -18,8 +18,14 @@ import com.codahale.metrics.Counter; import com.codahale.metrics.MetricRegistry; import com.google.common.base.Preconditions; +import com.hivemq.bootstrap.LoggingBootstrap; import com.hivemq.extension.sdk.api.annotations.NotNull; import com.hivemq.metrics.HiveMQMetrics; +import org.slf4j.LoggerFactory; + +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Logger; /** * Ensures the adapters use consistent namespaces for the metrics so they can be derived @@ -32,6 +38,7 @@ public class ProtocolAdapterMetricsHelper { private @NotNull String protocolAdapterType; private @NotNull String protocolAdapterId; private @NotNull MetricRegistry metricRegistry; + private final @NotNull Set metricNames = new HashSet<>(); static final String SUCCESS_COUNT = "success.count"; static final String FAILED_COUNT = "failed.count"; static final String PERIOD = "."; @@ -98,6 +105,13 @@ public void increment(final @NotNull String metricName){ metricRegistry.counter(createAdapterMetricsNamespace(metricName, false)).inc(); } + public void clearAll(){ + Preconditions.checkNotNull(metricRegistry); + LoggerFactory.getLogger(ProtocolAdapterMetricsHelper.class).info("Clearing all protocol adapter metrics"); + metricNames.forEach(metricRegistry::remove); + metricNames.clear(); + } + /** * Create a deterministic prefix for use in the metrics registry. * @@ -118,6 +132,8 @@ protected String createAdapterMetricsNamespace(@NotNull final String suffix, fin if(trailingPeriod){ stringBuilder.append(PERIOD); } - return stringBuilder.toString(); + String metricName = stringBuilder.toString(); + metricNames.add(metricName); + return metricName; } } diff --git a/hivemq-edge/src/main/java/com/hivemq/edge/modules/api/adapters/ProtocolAdapter.java b/hivemq-edge/src/main/java/com/hivemq/edge/modules/api/adapters/ProtocolAdapter.java index cee53ea53b..8cedc864ab 100644 --- a/hivemq-edge/src/main/java/com/hivemq/edge/modules/api/adapters/ProtocolAdapter.java +++ b/hivemq-edge/src/main/java/com/hivemq/edge/modules/api/adapters/ProtocolAdapter.java @@ -77,6 +77,13 @@ public interface ProtocolAdapter { @Nullable String getErrorMessage(); + /** + * Called by the framework when the instance will be discarded + */ + default void destroy() { + + } + enum RuntimeStatus { STARTED, diff --git a/hivemq-edge/src/main/java/com/hivemq/protocols/ProtocolAdapterManager.java b/hivemq-edge/src/main/java/com/hivemq/protocols/ProtocolAdapterManager.java index 14ebdc1db5..c021908cc8 100644 --- a/hivemq-edge/src/main/java/com/hivemq/protocols/ProtocolAdapterManager.java +++ b/hivemq-edge/src/main/java/com/hivemq/protocols/ProtocolAdapterManager.java @@ -293,6 +293,8 @@ public boolean deleteAdapter(final String id) { if (protocolAdapters.remove(id) != null) { try { synchronized(lock){ + //ensure the instance releases any hard state + adapterInstance.get().getAdapter().destroy(); Map mainMap = configurationService.protocolAdapterConfigurationService().getAllConfigs(); List adapterList = getAdapterListForType(adapterInstance.get().getAdapterInformation().getProtocolId()); From 5baf01e6d4719dc86a87e92c4ff5a9a54812f683 Mon Sep 17 00:00:00 2001 From: Simon Johnson <2924684+simon622@users.noreply.github.com> Date: Wed, 10 Jan 2024 13:30:49 +0000 Subject: [PATCH 3/4] tests --- .../bridge/metrics/PerBridgeMetrics.java | 11 +++-- .../metrics/ProtocolAdapterMetricsHelper.java | 32 +++++++------ .../adapter/ProtocolMetricsHelperTest.java | 25 +++++++++- .../com/hivemq/bridge/BridgeMetricsTest.java | 46 +++++++++++++++++++ 4 files changed, 96 insertions(+), 18 deletions(-) create mode 100644 hivemq-edge/src/test/java/com/hivemq/bridge/BridgeMetricsTest.java diff --git a/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java b/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java index 391a43cfb9..a1a515d557 100644 --- a/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java +++ b/hivemq-edge/src/main/java/com/hivemq/bridge/metrics/PerBridgeMetrics.java @@ -40,6 +40,7 @@ public class PerBridgeMetrics { private final @NotNull Counter loopPreventionForwardDropCounter; private final @NotNull Counter loopPreventionRemoteDropCounter; private final @NotNull Set metricNames = new HashSet<>(); + private final @NotNull Object mutex = new Object(); public PerBridgeMetrics(final @NotNull String bridgeName, final @NotNull MetricRegistry metricRegistry) { @@ -96,7 +97,9 @@ public PerBridgeMetrics(final @NotNull String bridgeName, final @NotNull MetricR private Counter createBridgeCounter(final @NotNull MetricRegistry metricRegistry, @NotNull final String... names){ final String metricName = MetricRegistry.name(BRIDGE_PREFIX, names); - metricNames.add(metricName); + synchronized (mutex){ + metricNames.add(metricName); + } return metricRegistry.counter(metricName); } @@ -142,7 +145,9 @@ private Counter createBridgeCounter(final @NotNull MetricRegistry metricRegistry public void clearAll(final @NotNull MetricRegistry metricRegistry){ Preconditions.checkNotNull(metricRegistry); - metricNames.forEach(metricRegistry::remove); - metricNames.clear(); + synchronized (mutex){ + metricNames.forEach(metricRegistry::remove); + metricNames.clear(); + } } } diff --git a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java index 333dd38d9c..d9df1fc7b6 100644 --- a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java +++ b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java @@ -39,6 +39,7 @@ public class ProtocolAdapterMetricsHelper { private @NotNull String protocolAdapterId; private @NotNull MetricRegistry metricRegistry; private final @NotNull Set metricNames = new HashSet<>(); + private final Object mutex = new Object(); static final String SUCCESS_COUNT = "success.count"; static final String FAILED_COUNT = "failed.count"; static final String PERIOD = "."; @@ -61,10 +62,10 @@ public ProtocolAdapterMetricsHelper(final @NotNull String protocolAdapterType, } protected void initRegistry(){ - publishSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish", true) + SUCCESS_COUNT); - publishFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish", true) + FAILED_COUNT); - connectionSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection", true) + SUCCESS_COUNT); - connectionFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection", true) + FAILED_COUNT); + publishSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish" + SUCCESS_COUNT)); + publishFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish" + FAILED_COUNT) ); + connectionSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection" + SUCCESS_COUNT)); + connectionFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection" + FAILED_COUNT)); } /** @@ -102,14 +103,19 @@ public void incrementConnectionSuccess(){ */ public void increment(final @NotNull String metricName){ Preconditions.checkNotNull(metricName); - metricRegistry.counter(createAdapterMetricsNamespace(metricName, false)).inc(); + metricRegistry.counter(createAdapterMetricsNamespace(metricName)).inc(); } + /** + * Will clear down all metrics in the registry created by this metrics helper. + * NB: metrics created outside the context of this helper will not be touched. + */ public void clearAll(){ Preconditions.checkNotNull(metricRegistry); - LoggerFactory.getLogger(ProtocolAdapterMetricsHelper.class).info("Clearing all protocol adapter metrics"); - metricNames.forEach(metricRegistry::remove); - metricNames.clear(); + synchronized (mutex){ + metricNames.forEach(metricRegistry::remove); + metricNames.clear(); + } } /** @@ -118,10 +124,9 @@ public void clearAll(){ * Example format of the namespace: * com.hivemq.edge.protocol-adapters.[test-type].[test-id].[suffix](.) with optional trailing period * @param suffix - the suffix to append to the namespace - * @param trailingPeriod - should the namespace by suffixed with a trailing period * @return a namespace string for use in the metrics registry */ - protected String createAdapterMetricsNamespace(@NotNull final String suffix, final boolean trailingPeriod){ + protected String createAdapterMetricsNamespace(@NotNull final String suffix){ StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(HiveMQMetrics.PROTOCOL_ADAPTER_PREFIX); stringBuilder.append(protocolAdapterType); @@ -129,11 +134,10 @@ protected String createAdapterMetricsNamespace(@NotNull final String suffix, fin stringBuilder.append(protocolAdapterId); stringBuilder.append(PERIOD); stringBuilder.append(suffix); - if(trailingPeriod){ - stringBuilder.append(PERIOD); - } String metricName = stringBuilder.toString(); - metricNames.add(metricName); + synchronized (mutex){ + metricNames.add(metricName); + } return metricName; } } diff --git a/hivemq-edge/src/test/java/com/hivemq/adapter/ProtocolMetricsHelperTest.java b/hivemq-edge/src/test/java/com/hivemq/adapter/ProtocolMetricsHelperTest.java index d58e594378..f254fbc562 100644 --- a/hivemq-edge/src/test/java/com/hivemq/adapter/ProtocolMetricsHelperTest.java +++ b/hivemq-edge/src/test/java/com/hivemq/adapter/ProtocolMetricsHelperTest.java @@ -26,6 +26,8 @@ */ public class ProtocolMetricsHelperTest { + static final String ARBITRARY_METRIC = "arbitrary-metric"; + @Test void testMetricsAdapterWrapperUpdatesRegistry() { @@ -38,8 +40,29 @@ void testMetricsAdapterWrapperUpdatesRegistry() { assertEquals(1, registry.getCounters().get("com.hivemq.edge.protocol-adapters.test-adapter-name.test-adapter-id.read.publish.failed.count").getCount(), "Matching failed data point should be incremented"); assertEquals(1, registry.getCounters().get("com.hivemq.edge.protocol-adapters.test-adapter-name.test-adapter-id.read.publish.success.count").getCount(), "Matching success data point should be incremented"); - helper.increment("arbitrary-metric"); + helper.increment(ARBITRARY_METRIC); assertEquals(1, registry.getCounters().get("com.hivemq.edge.protocol-adapters.test-adapter-name.test-adapter-id.arbitrary-metric").getCount(), "Matching arbitrary data point should be incremented"); } + + @Test + void testTearDownMetrics() { + + MetricRegistry registry = new MetricRegistry(); + + //adapter helper creates 4 metrics + ProtocolAdapterMetricsHelper helper1 = + new ProtocolAdapterMetricsHelper("tear-down-name1","test-adapter-id", registry); + + //add an arbitrary fifth + registry.counter(ARBITRARY_METRIC).inc(); + + assertEquals(5, registry.getMetrics().size(), "Number of metrics should match"); + + helper1.clearAll(); + + assertEquals(1, registry.getMetrics().size(), "Number of metrics should match"); + assertEquals(1, registry.getCounters().get(ARBITRARY_METRIC).getCount(), "Matching success data point should be incremented"); + + } } diff --git a/hivemq-edge/src/test/java/com/hivemq/bridge/BridgeMetricsTest.java b/hivemq-edge/src/test/java/com/hivemq/bridge/BridgeMetricsTest.java new file mode 100644 index 0000000000..99285ebaa0 --- /dev/null +++ b/hivemq-edge/src/test/java/com/hivemq/bridge/BridgeMetricsTest.java @@ -0,0 +1,46 @@ +package com.hivemq.bridge; + +import com.codahale.metrics.MetricRegistry; +import com.hivemq.bridge.metrics.PerBridgeMetrics; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Simon L Johnson + */ +public class BridgeMetricsTest { + + static final String ARBITRARY_METRIC = "arbitrary-metric"; + @Test + void testTearDownMetrics() { + + MetricRegistry registry = new MetricRegistry(); + + //adapter helper creates 10 metrics + PerBridgeMetrics perBridgeMetrics = new PerBridgeMetrics("bridge-name", registry); + + assertEquals(10, registry.getMetrics().size(), "Number of metrics should match"); + + PerBridgeMetrics perBridgeMetrics2 = new PerBridgeMetrics("bridge-name2", registry); + + assertEquals(20, registry.getMetrics().size(), "Number of metrics should match"); + + //add an arbitrary fifth + registry.counter(ARBITRARY_METRIC).inc(); + + assertEquals(21, registry.getMetrics().size(), "Number of metrics should match"); + + perBridgeMetrics.clearAll(registry); + + assertEquals(11, registry.getMetrics().size(), "Number of metrics should match"); + + perBridgeMetrics2.clearAll(registry); + + assertEquals(1, registry.getMetrics().size(), "Number of metrics should match"); + + assertEquals(1, registry.getCounters().get(ARBITRARY_METRIC).getCount(), "Matching success data point should be incremented"); + + } + +} From b9c478686d67369e0df2c71eefd8e7954bd4937e Mon Sep 17 00:00:00 2001 From: Simon Johnson <2924684+simon622@users.noreply.github.com> Date: Wed, 10 Jan 2024 15:59:26 +0000 Subject: [PATCH 4/4] fixed trailing period --- .../adapters/metrics/ProtocolAdapterMetricsHelper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java index d9df1fc7b6..4f13dcd77e 100644 --- a/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java +++ b/hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/metrics/ProtocolAdapterMetricsHelper.java @@ -62,10 +62,10 @@ public ProtocolAdapterMetricsHelper(final @NotNull String protocolAdapterType, } protected void initRegistry(){ - publishSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish" + SUCCESS_COUNT)); - publishFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish" + FAILED_COUNT) ); - connectionSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection" + SUCCESS_COUNT)); - connectionFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection" + FAILED_COUNT)); + publishSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish." + SUCCESS_COUNT)); + publishFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("read.publish." + FAILED_COUNT) ); + connectionSuccessCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection." + SUCCESS_COUNT)); + connectionFailedCounter = metricRegistry.counter(createAdapterMetricsNamespace("connection." + FAILED_COUNT)); } /**