From 895d64f00fec6e4db920db8e3f1c29a9e1826f06 Mon Sep 17 00:00:00 2001 From: Harshit Kushwaha Date: Thu, 14 May 2026 11:39:33 -0400 Subject: [PATCH 1/3] feat(ibm-mq-metrics): report queue manager uptime (#2823) Signed-off-by: Harshit Kushwaha --- ibm-mq-metrics/model/metrics.yaml | 13 ++++++++ .../io/opentelemetry/ibm/mq/WmqMonitor.java | 4 ++- .../opentelemetry/ibm/mq/metrics/Metrics.java | 17 +++++++++++ .../ibm/mq/metrics/MetricsConfig.java | 4 +++ .../ibm/mq/metricscollector/MessageBuddy.java | 30 +++++++++++++++++++ .../QueueManagerMetricsCollector.java | 13 ++++++++ 6 files changed, 80 insertions(+), 1 deletion(-) diff --git a/ibm-mq-metrics/model/metrics.yaml b/ibm-mq-metrics/model/metrics.yaml index cfdfca3f25..ad8cdd7d28 100644 --- a/ibm-mq-metrics/model/metrics.yaml +++ b/ibm-mq-metrics/model/metrics.yaml @@ -528,11 +528,24 @@ groups: metric_name: ibm.mq.heartbeat stability: development brief: "Queue manager heartbeat" + description: | + Deprecated. Use ibm.mq.queue_manager.uptime instead. instrument: gauge unit: "1" attributes: - ref: ibm.mq.queue.manager requirement_level: required + - id: ibm.mq.queue_manager.uptime + type: metric + metric_name: ibm.mq.queue_manager.uptime + stability: development + brief: "Queue manager uptime" + description: "Cumulative time the Queue Manager has been up" + instrument: gauge + unit: "s" + attributes: + - ref: ibm.mq.queue.manager + requirement_level: required - id: ibm.mq.archive.log.size type: metric metric_name: ibm.mq.archive.log.size diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java index 9611604cb5..a8081c4d41 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java @@ -71,7 +71,9 @@ public WmqMonitor(ConfigWrapper config, ExecutorService threadPool, Meter meter) this.metricsConfig = new MetricsConfig(config); - this.heartbeatGauge = Metrics.createIbmMqHeartbeat(meter); + @SuppressWarnings("OtelDeprecatedApiUsage") + LongGauge deprecatedHeartbeatGauge = Metrics.createIbmMqHeartbeat(meter); + this.heartbeatGauge = deprecatedHeartbeatGauge; this.errorCodesCounter = Metrics.createIbmMqConnectionErrors(meter); this.threadPool = threadPool; diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java index b5c5f3c871..e63f7aa6bb 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java @@ -351,6 +351,14 @@ public static LongGauge createIbmMqManagerStatus(Meter meter) { .build(); } + /** + * Deprecated: Use {@link #createIbmMqQueueManagerUptime(Meter)} instead. + * + * @deprecated in favor of {@link #createIbmMqQueueManagerUptime(Meter)} + * @param meter the meter to use for creating the gauge + * @return a LongGauge for the heartbeat metric + */ + @Deprecated public static LongGauge createIbmMqHeartbeat(Meter meter) { return meter .gaugeBuilder("ibm.mq.heartbeat") @@ -360,6 +368,15 @@ public static LongGauge createIbmMqHeartbeat(Meter meter) { .build(); } + public static LongGauge createIbmMqQueueManagerUptime(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.queue_manager.uptime") + .ofLongs() + .setUnit("s") + .setDescription("Queue manager uptime") + .build(); + } + public static LongGauge createIbmMqArchiveLogSize(Meter meter) { return meter .gaugeBuilder("ibm.mq.archive.log.size") diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricsConfig.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricsConfig.java index 2b4c099589..f2bc14c858 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricsConfig.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricsConfig.java @@ -171,6 +171,10 @@ public boolean isIbmMqHeartbeatEnabled() { return isEnabled("ibm.mq.heartbeat"); } + public boolean isIbmMqQueueManagerUptimeEnabled() { + return isEnabled("ibm.mq.queue_manager.uptime"); + } + public boolean isIbmMqArchiveLogSizeEnabled() { return isEnabled("ibm.mq.archive.log.size"); } diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java index 688f9541d1..6f5f8a6a6f 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java @@ -11,6 +11,8 @@ import com.ibm.mq.headers.pcf.PCFException; import com.ibm.mq.headers.pcf.PCFMessage; import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; public final class MessageBuddy { @@ -72,4 +74,32 @@ public static long channelStartTime(PCFMessage message) throws PCFException { public static String jobName(PCFMessage message) throws PCFException { return message.getStringParameterValue(CMQCFC.MQCACH_MCA_JOB_NAME).trim(); } + + /** + * Calculate the queue manager uptime in seconds. + * + *

Fetches the queue manager start date and time from the PCF response, parses them, and + * calculates the difference from the current system time. The start time is assumed to be in the + * system's default timezone. + * + * @param message the PCF response message containing queue manager information + * @return uptime in seconds since the queue manager started + * @throws PCFException if the required attributes cannot be retrieved from the PCF message + */ + public static long queueManagerUptime(PCFMessage message) throws PCFException { + // Note: MQCA_Q_MGR_START_DATE (3175) and MQCA_Q_MGR_START_TIME (3176) may not have + // constant definitions in all IBM MQ client versions, so we use raw parameter IDs + String date = message.getStringParameterValue(3175).trim(); + String time = message.getStringParameterValue(3176).trim(); + + // Parse the date (format: yyyy-MM-dd) and time (format: HH.mm.ss) + // Assumes the QM start time is in the system's default timezone (typically where the + // collector is running) + LocalDateTime qmgrStartLocal = LocalDateTime.parse(date + "T" + time.replaceAll("\\.", ":")); + Instant qmgrStartInstant = qmgrStartLocal.atZone(ZoneId.systemDefault()).toInstant(); + Instant now = Instant.now(); + + // Calculate uptime in seconds + return now.getEpochSecond() - qmgrStartInstant.getEpochSecond(); + } } diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java index 2b3d570862..c22c41a287 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java @@ -30,6 +30,7 @@ public final class QueueManagerMetricsCollector implements Consumer Date: Thu, 14 May 2026 12:13:04 -0400 Subject: [PATCH 2/3] test(ibm-mq-metrics): add comprehensive uptime and timezone tests Signed-off-by: Harshit Kushwaha --- ibm-mq-metrics/config.yml | 2 + .../ibm/mq/metricscollector/MessageBuddy.java | 17 ++--- .../mq/metricscollector/MessageBuddyTest.java | 65 +++++++++++++++++++ .../QueueManagerMetricsCollectorTest.java | 19 +++--- .../src/test/resources/conf/config.yml | 2 + 5 files changed, 87 insertions(+), 18 deletions(-) create mode 100644 ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddyTest.java diff --git a/ibm-mq-metrics/config.yml b/ibm-mq-metrics/config.yml index 69e99e6cf7..6f2b50e462 100644 --- a/ibm-mq-metrics/config.yml +++ b/ibm-mq-metrics/config.yml @@ -186,6 +186,8 @@ metrics: enabled: true "ibm.mq.heartbeat": # Queue manager heartbeat enabled: true + "ibm.mq.queue_manager.uptime": # Queue manager uptime + enabled: true "ibm.mq.archive.log.size": # Queue manager archive log size enabled: true "ibm.mq.manager.max.active.channels": # Queue manager max active channels diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java index 6f5f8a6a6f..248190965e 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddy.java @@ -12,7 +12,7 @@ import com.ibm.mq.headers.pcf.PCFMessage; import java.time.Instant; import java.time.LocalDateTime; -import java.time.ZoneId; +import java.time.ZoneOffset; public final class MessageBuddy { @@ -79,24 +79,21 @@ public static String jobName(PCFMessage message) throws PCFException { * Calculate the queue manager uptime in seconds. * *

Fetches the queue manager start date and time from the PCF response, parses them, and - * calculates the difference from the current system time. The start time is assumed to be in the - * system's default timezone. + * calculates the difference from the current system time. * * @param message the PCF response message containing queue manager information * @return uptime in seconds since the queue manager started * @throws PCFException if the required attributes cannot be retrieved from the PCF message */ public static long queueManagerUptime(PCFMessage message) throws PCFException { - // Note: MQCA_Q_MGR_START_DATE (3175) and MQCA_Q_MGR_START_TIME (3176) may not have - // constant definitions in all IBM MQ client versions, so we use raw parameter IDs - String date = message.getStringParameterValue(3175).trim(); - String time = message.getStringParameterValue(3176).trim(); + String date = message.getStringParameterValue(CMQCFC.MQCACF_Q_MGR_START_DATE).trim(); + String time = message.getStringParameterValue(CMQCFC.MQCACF_Q_MGR_START_TIME).trim(); // Parse the date (format: yyyy-MM-dd) and time (format: HH.mm.ss) - // Assumes the QM start time is in the system's default timezone (typically where the - // collector is running) + // The queue manager start timestamp does not include timezone information in this PCF response, + // so we normalize to UTC for a stable and predictable baseline across regions. LocalDateTime qmgrStartLocal = LocalDateTime.parse(date + "T" + time.replaceAll("\\.", ":")); - Instant qmgrStartInstant = qmgrStartLocal.atZone(ZoneId.systemDefault()).toInstant(); + Instant qmgrStartInstant = qmgrStartLocal.toInstant(ZoneOffset.UTC); Instant now = Instant.now(); // Calculate uptime in seconds diff --git a/ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddyTest.java b/ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddyTest.java new file mode 100644 index 0000000000..56615b4033 --- /dev/null +++ b/ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddyTest.java @@ -0,0 +1,65 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.ibm.mq.metricscollector; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.ibm.mq.constants.CMQCFC; +import com.ibm.mq.headers.pcf.PCFException; +import com.ibm.mq.headers.pcf.PCFMessage; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.Locale; +import java.util.TimeZone; +import org.junit.jupiter.api.Test; + +class MessageBuddyTest { + + private static final DateTimeFormatter DATE_FORMATTER = + DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ROOT); + private static final DateTimeFormatter TIME_FORMATTER = + DateTimeFormatter.ofPattern("HH.mm.ss", Locale.ROOT); + + @Test + void queueManagerUptimeUsesUtcAndDoesNotDriftWithSystemTimezone() throws PCFException { + TimeZone originalTz = TimeZone.getDefault(); + try { + Instant startInstant = Instant.now().minusSeconds(600); + LocalDateTime startUtc = LocalDateTime.ofInstant(startInstant, ZoneOffset.UTC); + String startDate = startUtc.format(DATE_FORMATTER); + String startTime = startUtc.format(TIME_FORMATTER); + + PCFMessage message = new PCFMessage(2, CMQCFC.MQCMD_INQUIRE_Q_MGR_STATUS, 1, true); + message.addParameter(CMQCFC.MQCACF_Q_MGR_START_DATE, startDate); + message.addParameter(CMQCFC.MQCACF_Q_MGR_START_TIME, startTime); + + TimeZone.setDefault(TimeZone.getTimeZone("Pacific/Kiritimati")); + long beforeFirst = Instant.now().getEpochSecond(); + long firstResult = MessageBuddy.queueManagerUptime(message); + long afterFirst = Instant.now().getEpochSecond(); + + TimeZone.setDefault(TimeZone.getTimeZone("Pacific/Honolulu")); + long beforeSecond = Instant.now().getEpochSecond(); + long secondResult = MessageBuddy.queueManagerUptime(message); + long afterSecond = Instant.now().getEpochSecond(); + + long expectedLowerFirst = beforeFirst - startInstant.getEpochSecond(); + long expectedUpperFirst = afterFirst - startInstant.getEpochSecond(); + assertThat(firstResult).isBetween(expectedLowerFirst, expectedUpperFirst); + + long expectedLowerSecond = beforeSecond - startInstant.getEpochSecond(); + long expectedUpperSecond = afterSecond - startInstant.getEpochSecond(); + assertThat(secondResult).isBetween(expectedLowerSecond, expectedUpperSecond); + + // Changing the JVM default timezone should not materially change uptime when UTC is used. + assertThat(Math.abs(firstResult - secondResult)).isLessThanOrEqualTo(2); + } finally { + TimeZone.setDefault(originalTz); + } + } +} diff --git a/ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollectorTest.java b/ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollectorTest.java index 3c6ef15031..9ff6f1ac91 100644 --- a/ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollectorTest.java +++ b/ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollectorTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.ibm.mq.metricscollector; -import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; @@ -20,8 +19,6 @@ import io.opentelemetry.ibm.mq.opentelemetry.ConfigWrapper; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension; -import java.util.ArrayList; -import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -58,14 +55,18 @@ void testProcessPCFRequestAndPublishQMetricsForInquireQStatusCmd() throws Except new QueueManagerMetricsCollector( otelTesting.getOpenTelemetry().getMeter("opentelemetry.io/mq")); classUnderTest.accept(context); - List metricsList = new ArrayList<>(singletonList("ibm.mq.manager.status")); - + long managerStatus = Long.MIN_VALUE; + long queueManagerUptime = Long.MIN_VALUE; for (MetricData metric : otelTesting.getMetrics()) { - if (metricsList.remove(metric.getName())) { - assertThat(metric.getLongGaugeData().getPoints().iterator().next().getValue()).isEqualTo(2); + if ("ibm.mq.manager.status".equals(metric.getName())) { + managerStatus = metric.getLongGaugeData().getPoints().iterator().next().getValue(); + } + if ("ibm.mq.queue_manager.uptime".equals(metric.getName())) { + queueManagerUptime = metric.getLongGaugeData().getPoints().iterator().next().getValue(); } } - assertThat(metricsList).isEmpty(); + assertThat(managerStatus).isEqualTo(2); + assertThat(queueManagerUptime).isGreaterThan(0); } /* Request @@ -115,6 +116,8 @@ private static PCFMessage[] createPCFResponseForInquireQMgrStatusCmd() { response1.addParameter(CMQCFC.MQIACF_RESTART_LOG_SIZE, 42); response1.addParameter(CMQCFC.MQIACF_REUSABLE_LOG_SIZE, 42); response1.addParameter(CMQCFC.MQIACF_ARCHIVE_LOG_SIZE, 42); + response1.addParameter(CMQCFC.MQCACF_Q_MGR_START_DATE, "2024-01-01"); + response1.addParameter(CMQCFC.MQCACF_Q_MGR_START_TIME, "12.00.00"); return new PCFMessage[] {response1}; } diff --git a/ibm-mq-metrics/src/test/resources/conf/config.yml b/ibm-mq-metrics/src/test/resources/conf/config.yml index 07b1770989..cf9f5a7eac 100644 --- a/ibm-mq-metrics/src/test/resources/conf/config.yml +++ b/ibm-mq-metrics/src/test/resources/conf/config.yml @@ -178,6 +178,8 @@ metrics: enabled: true "ibm.mq.heartbeat": # Queue manager heartbeat enabled: true + "ibm.mq.queue_manager.uptime": # Queue manager uptime + enabled: true "ibm.mq.archive.log.size": # Queue manager archive log size enabled: true "ibm.mq.manager.max.active.channels": # Queue manager max active channels From 6f8dc9f5c8689a8a5b28ae1d862614b0c8291275 Mon Sep 17 00:00:00 2001 From: Harshit Kushwaha Date: Fri, 15 May 2026 00:53:15 -0400 Subject: [PATCH 3/3] refactor(ibm-mq-metrics): replace deprecated heartbeat gauge with uptime counter and update related metrics Signed-off-by: Harshit Kushwaha --- ibm-mq-metrics/model/metrics.yaml | 5 +---- .../java/io/opentelemetry/ibm/mq/WmqMonitor.java | 4 +--- .../io/opentelemetry/ibm/mq/metrics/Metrics.java | 13 ++----------- .../QueueManagerMetricsCollector.java | 7 ++++--- .../QueueManagerMetricsCollectorTest.java | 2 +- 5 files changed, 9 insertions(+), 22 deletions(-) diff --git a/ibm-mq-metrics/model/metrics.yaml b/ibm-mq-metrics/model/metrics.yaml index ad8cdd7d28..e9cdeaa9cc 100644 --- a/ibm-mq-metrics/model/metrics.yaml +++ b/ibm-mq-metrics/model/metrics.yaml @@ -528,8 +528,6 @@ groups: metric_name: ibm.mq.heartbeat stability: development brief: "Queue manager heartbeat" - description: | - Deprecated. Use ibm.mq.queue_manager.uptime instead. instrument: gauge unit: "1" attributes: @@ -540,8 +538,7 @@ groups: metric_name: ibm.mq.queue_manager.uptime stability: development brief: "Queue manager uptime" - description: "Cumulative time the Queue Manager has been up" - instrument: gauge + instrument: counter unit: "s" attributes: - ref: ibm.mq.queue.manager diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java index a8081c4d41..9611604cb5 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/WmqMonitor.java @@ -71,9 +71,7 @@ public WmqMonitor(ConfigWrapper config, ExecutorService threadPool, Meter meter) this.metricsConfig = new MetricsConfig(config); - @SuppressWarnings("OtelDeprecatedApiUsage") - LongGauge deprecatedHeartbeatGauge = Metrics.createIbmMqHeartbeat(meter); - this.heartbeatGauge = deprecatedHeartbeatGauge; + this.heartbeatGauge = Metrics.createIbmMqHeartbeat(meter); this.errorCodesCounter = Metrics.createIbmMqConnectionErrors(meter); this.threadPool = threadPool; diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java index e63f7aa6bb..adfe581538 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java @@ -351,14 +351,6 @@ public static LongGauge createIbmMqManagerStatus(Meter meter) { .build(); } - /** - * Deprecated: Use {@link #createIbmMqQueueManagerUptime(Meter)} instead. - * - * @deprecated in favor of {@link #createIbmMqQueueManagerUptime(Meter)} - * @param meter the meter to use for creating the gauge - * @return a LongGauge for the heartbeat metric - */ - @Deprecated public static LongGauge createIbmMqHeartbeat(Meter meter) { return meter .gaugeBuilder("ibm.mq.heartbeat") @@ -368,10 +360,9 @@ public static LongGauge createIbmMqHeartbeat(Meter meter) { .build(); } - public static LongGauge createIbmMqQueueManagerUptime(Meter meter) { + public static LongCounter createIbmMqQueueManagerUptime(Meter meter) { return meter - .gaugeBuilder("ibm.mq.queue_manager.uptime") - .ofLongs() + .counterBuilder("ibm.mq.queue_manager.uptime") .setUnit("s") .setDescription("Queue manager uptime") .build(); diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java index c22c41a287..e79f6e14fc 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metricscollector/QueueManagerMetricsCollector.java @@ -11,6 +11,7 @@ import com.ibm.mq.constants.CMQCFC; import com.ibm.mq.headers.pcf.PCFMessage; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.metrics.LongCounter; import io.opentelemetry.api.metrics.LongGauge; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.ibm.mq.metrics.Metrics; @@ -30,7 +31,7 @@ public final class QueueManagerMetricsCollector implements Consumer