From 42bcd5fc8e2d345ba80a81442cb2cd16083cb306 Mon Sep 17 00:00:00 2001 From: Harshit Kushwaha Date: Thu, 14 May 2026 11:39:33 -0400 Subject: [PATCH 1/5] feat(ibm-mq-metrics): report queue manager uptime (#2823) Signed-off-by: Harshit Kushwaha --- ibm-mq-metrics/config.yml | 2 ++ ibm-mq-metrics/model/metrics.yaml | 13 ++++++++ .../ibm/mq/metrics/MetricProducer.java | 32 +++++++++++++++++++ .../ibm/mq/metrics/MetricsConfig.java | 4 +++ .../ibm/mq/metricscollector/MessageBuddy.java | 30 +++++++++++++++++ .../QueueManagerMetricsCollector.java | 11 +++++++ .../QueueManagerMetricsCollectorTest.java | 12 ++++++- .../src/test/resources/conf/config.yml | 2 ++ 8 files changed, 105 insertions(+), 1 deletion(-) diff --git a/ibm-mq-metrics/config.yml b/ibm-mq-metrics/config.yml index d0a3c8544..c1b91cca9 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/model/metrics.yaml b/ibm-mq-metrics/model/metrics.yaml index cfdfca3f2..ad8cdd7d2 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/metrics/MetricProducer.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java index c76cc9496..1b7f568f7 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java @@ -37,6 +37,7 @@ public final class MetricProducer implements io.opentelemetry.sdk.metrics.export private final Map counterIbmMqQueueDepthHighEvent; private final Map counterIbmMqQueueDepthLowEvent; private final Map counterIbmMqUnauthorizedEvent; + private final Map counterIbmMqQueueManagerUptime; private final Map counterIbmMqConnectionErrors; private long currentEpochNanos; @@ -50,6 +51,7 @@ public MetricProducer(Resource resource, InstrumentationScopeInfo info) { this.counterIbmMqQueueDepthHighEvent = new ConcurrentHashMap<>(); this.counterIbmMqQueueDepthLowEvent = new ConcurrentHashMap<>(); this.counterIbmMqUnauthorizedEvent = new ConcurrentHashMap<>(); + this.counterIbmMqQueueManagerUptime = new ConcurrentHashMap<>(); this.counterIbmMqConnectionErrors = new ConcurrentHashMap<>(); } @@ -668,6 +670,36 @@ public void recordIbmMqHeartbeat(long value, Attributes attributes) { this.currentEpochNanos, Clock.getDefault().now(), attributes, value))))); } + public void addIbmMqQueueManagerUptime(long value, Attributes attributes) { + long cumulativeValue = + this.counterIbmMqQueueManagerUptime.compute( + attributes, + (k, v) -> { + if (v == null) { + return value; + } else { + return v + value; + } + }); + metricData.add( + createMetricData( + this.resource, + this.instrumentationScopeInfo, + "ibm.mq.queue_manager.uptime", + "Queue manager uptime", + "s", + MetricDataType.LONG_SUM, + SumData.createLongSumData( + /* isMonotonic= */ true, + AggregationTemporality.CUMULATIVE, + Collections.singletonList( + LongPointData.create( + this.currentEpochNanos, + Clock.getDefault().now(), + attributes, + cumulativeValue))))); + } + public void recordIbmMqArchiveLogSize(long value, Attributes attributes) { metricData.add( createMetricData( 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 2b4c09958..f2bc14c85 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 688f9541d..6f5f8a6a6 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 5f02d1ba6..61aa2dbe4 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 @@ -79,6 +79,17 @@ public void accept(MetricsCollectorContext context) { int maxActiveChannels = context.getQueueManager().getMaxActiveChannels(); producer.recordIbmMqManagerMaxActiveChannels(maxActiveChannels, attributes); } + if (context.getMetricsConfig().isIbmMqQueueManagerUptimeEnabled()) { + try { + long uptimeSeconds = MessageBuddy.queueManagerUptime(responses.get(0)); + producer.addIbmMqQueueManagerUptime(uptimeSeconds, attributes); + } catch (Exception e) { + logger.debug( + "Unable to calculate queue manager uptime for {}: {}", + context.getQueueManagerName(), + e.getMessage()); + } + } } catch (Exception e) { logger.error(e.getMessage()); throw new IllegalStateException(e); 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 1d3b2e79a..c4e2a6d72 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 @@ -57,10 +57,18 @@ void testProcessPCFRequestAndPublishQMetricsForInquireQStatusCmd() throws Except classUnderTest = new QueueManagerMetricsCollector(producer); classUnderTest.accept(context); List metricsList = new ArrayList<>(singletonList("ibm.mq.manager.status")); + metricsList.add("ibm.mq.queue_manager.uptime"); for (MetricData metric : producer.produce(Resource.empty())) { if (metricsList.remove(metric.getName())) { - assertThat(metric.getLongGaugeData().getPoints().iterator().next().getValue()).isEqualTo(2); + if ("ibm.mq.manager.status".equals(metric.getName())) { + assertThat(metric.getLongGaugeData().getPoints().iterator().next().getValue()) + .isEqualTo(2); + } + if ("ibm.mq.queue_manager.uptime".equals(metric.getName())) { + assertThat(metric.getLongSumData().getPoints().iterator().next().getValue()) + .isGreaterThan(0); + } } } assertThat(metricsList).isEmpty(); @@ -113,6 +121,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 07b177098..cf9f5a7ea 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 0d8e49fd497a3384a4ef1ce08ca0b85dd1969fb1 Mon Sep 17 00:00:00 2001 From: Harshit Kushwaha Date: Thu, 14 May 2026 12:13:04 -0400 Subject: [PATCH 2/5] test(ibm-mq-metrics): add comprehensive uptime and timezone tests Signed-off-by: Harshit Kushwaha --- .../io/opentelemetry/ibm/mq/WmqMonitor.java | 27 ++++---- .../ibm/mq/metrics/MetricProducer.java | 16 ++--- .../ibm/mq/metricscollector/MessageBuddy.java | 17 ++--- .../mq/metricscollector/MessageBuddyTest.java | 65 +++++++++++++++++++ 4 files changed, 95 insertions(+), 30 deletions(-) create mode 100644 ibm-mq-metrics/src/test/java/io/opentelemetry/ibm/mq/metricscollector/MessageBuddyTest.java 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 b0ae882ee..1aeae0f14 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 @@ -5,15 +5,28 @@ package io.opentelemetry.ibm.mq; -import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.ERROR_CODE; -import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.IBM_MQ_QUEUE_MANAGER; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.function.Consumer; + +import javax.annotation.Nullable; + +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import com.ibm.mq.MQException; import com.ibm.mq.MQQueueManager; import com.ibm.mq.headers.pcf.PCFMessageAgent; + import io.opentelemetry.api.common.Attributes; import io.opentelemetry.ibm.mq.config.QueueManager; +import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.ERROR_CODE; +import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.IBM_MQ_QUEUE_MANAGER; import io.opentelemetry.ibm.mq.metrics.MetricProducer; import io.opentelemetry.ibm.mq.metrics.MetricsConfig; import io.opentelemetry.ibm.mq.metricscollector.ChannelMetricsCollector; @@ -29,16 +42,6 @@ import io.opentelemetry.ibm.mq.metricscollector.TopicMetricsCollector; import io.opentelemetry.ibm.mq.opentelemetry.ConfigWrapper; import io.opentelemetry.ibm.mq.util.WmqUtil; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.function.Consumer; -import javax.annotation.Nullable; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public final class WmqMonitor { diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java index 1b7f568f7..9901aaaf8 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java @@ -5,9 +5,16 @@ package io.opentelemetry.ibm.mq.metrics; -import static io.opentelemetry.ibm.mq.metrics.MetricData.createMetricData; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.LinkedBlockingDeque; import io.opentelemetry.api.common.Attributes; +import static io.opentelemetry.ibm.mq.metrics.MetricData.createMetricData; import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; @@ -17,13 +24,6 @@ import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.opentelemetry.sdk.metrics.data.SumData; import io.opentelemetry.sdk.resources.Resource; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.LinkedBlockingDeque; // This file is generated using weaver. Do not edit manually. 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 6f5f8a6a6..248190965 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 000000000..56615b403 --- /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); + } + } +} From 5812059be7aa96336fd2854e73428e5c0021e413 Mon Sep 17 00:00:00 2001 From: Harshit Kushwaha Date: Fri, 15 May 2026 00:53:15 -0400 Subject: [PATCH 3/5] 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 +- .../opentelemetry/ibm/mq/metrics/Metrics.java | 449 ++++++++++++++++++ 2 files changed, 450 insertions(+), 4 deletions(-) create mode 100644 ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java diff --git a/ibm-mq-metrics/model/metrics.yaml b/ibm-mq-metrics/model/metrics.yaml index ad8cdd7d2..e9cdeaa9c 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/metrics/Metrics.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java new file mode 100644 index 000000000..adfe58153 --- /dev/null +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java @@ -0,0 +1,449 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.ibm.mq.metrics; + +import io.opentelemetry.api.metrics.LongCounter; +import io.opentelemetry.api.metrics.LongGauge; +import io.opentelemetry.api.metrics.Meter; +import java.util.function.Function; + +// This file is generated using weaver. Do not edit manually. + +/** Metric definitions generated from a Weaver model. Do not edit manually. */ +public final class Metrics { + public static final Function MIBY_TO_BYTES = x -> x * 1024L * 1024L; + + private Metrics() {} + + public static LongGauge createIbmMqMessageRetryCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.message.retry.count") + .ofLongs() + .setUnit("{message}") + .setDescription("Number of message retries") + .build(); + } + + public static LongGauge createIbmMqStatus(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.status") + .ofLongs() + .setUnit("1") + .setDescription("Channel status") + .build(); + } + + public static LongGauge createIbmMqMaxSharingConversations(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.max.sharing.conversations") + .ofLongs() + .setUnit("{conversation}") + .setDescription("Maximum number of conversations permitted on this channel instance.") + .build(); + } + + public static LongGauge createIbmMqCurrentSharingConversations(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.current.sharing.conversations") + .ofLongs() + .setUnit("{conversation}") + .setDescription("Current number of conversations permitted on this channel instance.") + .build(); + } + + public static LongGauge createIbmMqByteReceived(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.byte.received") + .ofLongs() + .setUnit("By") + .setDescription("Number of bytes received") + .build(); + } + + public static LongGauge createIbmMqByteSent(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.byte.sent") + .ofLongs() + .setUnit("By") + .setDescription("Number of bytes sent") + .build(); + } + + public static LongGauge createIbmMqBuffersReceived(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.buffers.received") + .ofLongs() + .setUnit("{buffer}") + .setDescription("Buffers received") + .build(); + } + + public static LongGauge createIbmMqBuffersSent(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.buffers.sent") + .ofLongs() + .setUnit("{buffer}") + .setDescription("Buffers sent") + .build(); + } + + public static LongGauge createIbmMqMessageCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.message.count") + .ofLongs() + .setUnit("{message}") + .setDescription("Message count") + .build(); + } + + public static LongGauge createIbmMqOpenInputCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.open.input.count") + .ofLongs() + .setUnit("{application}") + .setDescription("Count of applications sending messages to the queue") + .build(); + } + + public static LongGauge createIbmMqOpenOutputCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.open.output.count") + .ofLongs() + .setUnit("{application}") + .setDescription("Count of applications consuming messages from the queue") + .build(); + } + + public static LongGauge createIbmMqHighQueueDepth(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.high.queue.depth") + .ofLongs() + .setUnit("{percent}") + .setDescription("The current high queue depth") + .build(); + } + + public static LongGauge createIbmMqServiceInterval(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.service.interval") + .ofLongs() + .setUnit("{percent}") + .setDescription("The queue service interval") + .build(); + } + + public static LongCounter createIbmMqQueueDepthFullEvent(Meter meter) { + return meter + .counterBuilder("ibm.mq.queue.depth.full.event") + .setUnit("{event}") + .setDescription("The number of full queue events") + .build(); + } + + public static LongCounter createIbmMqQueueDepthHighEvent(Meter meter) { + return meter + .counterBuilder("ibm.mq.queue.depth.high.event") + .setUnit("{event}") + .setDescription("The number of high queue events") + .build(); + } + + public static LongCounter createIbmMqQueueDepthLowEvent(Meter meter) { + return meter + .counterBuilder("ibm.mq.queue.depth.low.event") + .setUnit("{event}") + .setDescription("The number of low queue events") + .build(); + } + + public static LongGauge createIbmMqExpiredMessages(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.expired.messages") + .ofLongs() + .setUnit("{message}") + .setDescription("Number of expired messages") + .build(); + } + + public static LongGauge createIbmMqUncommittedMessages(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.uncommitted.messages") + .ofLongs() + .setUnit("{message}") + .setDescription("Number of uncommitted messages") + .build(); + } + + public static LongGauge createIbmMqOldestMsgAge(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.oldest.msg.age") + .ofLongs() + .setUnit("microseconds") + .setDescription("Queue message oldest age") + .build(); + } + + public static LongGauge createIbmMqCurrentMaxQueueFilesize(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.current.max.queue.filesize") + .ofLongs() + .setUnit("By") + .setDescription("Current maximum queue file size") + .build(); + } + + public static LongGauge createIbmMqCurrentQueueFilesize(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.current.queue.filesize") + .ofLongs() + .setUnit("By") + .setDescription("Current queue file size") + .build(); + } + + public static LongGauge createIbmMqInstancesPerClient(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.instances.per.client") + .ofLongs() + .setUnit("{instance}") + .setDescription("Instances per client") + .build(); + } + + public static LongGauge createIbmMqMessageDeqCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.message.deq.count") + .ofLongs() + .setUnit("{message}") + .setDescription("Message dequeue count") + .build(); + } + + public static LongGauge createIbmMqMessageEnqCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.message.enq.count") + .ofLongs() + .setUnit("{message}") + .setDescription("Message enqueue count") + .build(); + } + + public static LongGauge createIbmMqQueueDepth(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.queue.depth") + .ofLongs() + .setUnit("{message}") + .setDescription("Current queue depth") + .build(); + } + + public static LongGauge createIbmMqServiceIntervalEvent(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.service.interval.event") + .ofLongs() + .setUnit("1") + .setDescription("Queue service interval event") + .build(); + } + + public static LongGauge createIbmMqReusableLogSize(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.reusable.log.size") + .ofLongs() + .setUnit("By") + .setDescription( + "The amount of space occupied, in megabytes, by log extents available to be reused.") + .build(); + } + + public static LongGauge createIbmMqManagerActiveChannels(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.manager.active.channels") + .ofLongs() + .setUnit("{channel}") + .setDescription("The queue manager active maximum channels limit") + .build(); + } + + public static LongGauge createIbmMqRestartLogSize(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.restart.log.size") + .ofLongs() + .setUnit("By") + .setDescription("Size of the log data required for restart recovery in megabytes.") + .build(); + } + + public static LongGauge createIbmMqMaxQueueDepth(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.max.queue.depth") + .ofLongs() + .setUnit("{message}") + .setDescription("Maximum queue depth") + .build(); + } + + public static LongGauge createIbmMqOnqtimeShortPeriod(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.onqtime.short_period") + .ofLongs() + .setUnit("microseconds") + .setDescription( + "Amount of time, in microseconds, that a message spent on the queue, over a short period") + .build(); + } + + public static LongGauge createIbmMqOnqtimeLongPeriod(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.onqtime.long_period") + .ofLongs() + .setUnit("microseconds") + .setDescription( + "Amount of time, in microseconds, that a message spent on the queue, over a longer period") + .build(); + } + + public static LongGauge createIbmMqMessageReceivedCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.message.received.count") + .ofLongs() + .setUnit("{message}") + .setDescription("Number of messages received") + .build(); + } + + public static LongGauge createIbmMqMessageSentCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.message.sent.count") + .ofLongs() + .setUnit("{message}") + .setDescription("Number of messages sent") + .build(); + } + + public static LongGauge createIbmMqMaxInstances(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.max.instances") + .ofLongs() + .setUnit("{instance}") + .setDescription("Max channel instances") + .build(); + } + + public static LongGauge createIbmMqConnectionCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.connection.count") + .ofLongs() + .setUnit("{connection}") + .setDescription("Active connections count") + .build(); + } + + public static LongGauge createIbmMqManagerStatus(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.manager.status") + .ofLongs() + .setUnit("1") + .setDescription("Queue manager status") + .build(); + } + + public static LongGauge createIbmMqHeartbeat(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.heartbeat") + .ofLongs() + .setUnit("1") + .setDescription("Queue manager heartbeat") + .build(); + } + + public static LongCounter createIbmMqQueueManagerUptime(Meter meter) { + return meter + .counterBuilder("ibm.mq.queue_manager.uptime") + .setUnit("s") + .setDescription("Queue manager uptime") + .build(); + } + + public static LongGauge createIbmMqArchiveLogSize(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.archive.log.size") + .ofLongs() + .setUnit("By") + .setDescription("Queue manager archive log size") + .build(); + } + + public static LongGauge createIbmMqManagerMaxActiveChannels(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.manager.max.active.channels") + .ofLongs() + .setUnit("{channel}") + .setDescription("Queue manager max active channels") + .build(); + } + + public static LongGauge createIbmMqManagerStatisticsInterval(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.manager.statistics.interval") + .ofLongs() + .setUnit("1") + .setDescription("Queue manager statistics interval") + .build(); + } + + public static LongGauge createIbmMqPublishCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.publish.count") + .ofLongs() + .setUnit("{publication}") + .setDescription("Topic publication count") + .build(); + } + + public static LongGauge createIbmMqSubscriptionCount(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.subscription.count") + .ofLongs() + .setUnit("{subscription}") + .setDescription("Topic subscription count") + .build(); + } + + public static LongGauge createIbmMqListenerStatus(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.listener.status") + .ofLongs() + .setUnit("1") + .setDescription("Listener status") + .build(); + } + + public static LongCounter createIbmMqUnauthorizedEvent(Meter meter) { + return meter + .counterBuilder("ibm.mq.unauthorized.event") + .setUnit("{event}") + .setDescription("Number of authentication error events") + .build(); + } + + public static LongGauge createIbmMqManagerMaxHandles(Meter meter) { + return meter + .gaugeBuilder("ibm.mq.manager.max.handles") + .ofLongs() + .setUnit("{event}") + .setDescription("Max open handles") + .build(); + } + + public static LongCounter createIbmMqConnectionErrors(Meter meter) { + return meter + .counterBuilder("ibm.mq.connection.errors") + .setUnit("{errors}") + .setDescription("Number of connection errors") + .build(); + } +} From b9af0d0540901c7ad65b5d1f19547a72f25306a1 Mon Sep 17 00:00:00 2001 From: Harshit Kushwaha Date: Wed, 27 May 2026 04:01:18 -0400 Subject: [PATCH 4/5] chore(ibm-mq-metrics): remove stale Metrics.java --- .../opentelemetry/ibm/mq/metrics/Metrics.java | 449 ------------------ 1 file changed, 449 deletions(-) delete mode 100644 ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java 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 deleted file mode 100644 index adfe58153..000000000 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/Metrics.java +++ /dev/null @@ -1,449 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.ibm.mq.metrics; - -import io.opentelemetry.api.metrics.LongCounter; -import io.opentelemetry.api.metrics.LongGauge; -import io.opentelemetry.api.metrics.Meter; -import java.util.function.Function; - -// This file is generated using weaver. Do not edit manually. - -/** Metric definitions generated from a Weaver model. Do not edit manually. */ -public final class Metrics { - public static final Function MIBY_TO_BYTES = x -> x * 1024L * 1024L; - - private Metrics() {} - - public static LongGauge createIbmMqMessageRetryCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.message.retry.count") - .ofLongs() - .setUnit("{message}") - .setDescription("Number of message retries") - .build(); - } - - public static LongGauge createIbmMqStatus(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.status") - .ofLongs() - .setUnit("1") - .setDescription("Channel status") - .build(); - } - - public static LongGauge createIbmMqMaxSharingConversations(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.max.sharing.conversations") - .ofLongs() - .setUnit("{conversation}") - .setDescription("Maximum number of conversations permitted on this channel instance.") - .build(); - } - - public static LongGauge createIbmMqCurrentSharingConversations(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.current.sharing.conversations") - .ofLongs() - .setUnit("{conversation}") - .setDescription("Current number of conversations permitted on this channel instance.") - .build(); - } - - public static LongGauge createIbmMqByteReceived(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.byte.received") - .ofLongs() - .setUnit("By") - .setDescription("Number of bytes received") - .build(); - } - - public static LongGauge createIbmMqByteSent(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.byte.sent") - .ofLongs() - .setUnit("By") - .setDescription("Number of bytes sent") - .build(); - } - - public static LongGauge createIbmMqBuffersReceived(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.buffers.received") - .ofLongs() - .setUnit("{buffer}") - .setDescription("Buffers received") - .build(); - } - - public static LongGauge createIbmMqBuffersSent(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.buffers.sent") - .ofLongs() - .setUnit("{buffer}") - .setDescription("Buffers sent") - .build(); - } - - public static LongGauge createIbmMqMessageCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.message.count") - .ofLongs() - .setUnit("{message}") - .setDescription("Message count") - .build(); - } - - public static LongGauge createIbmMqOpenInputCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.open.input.count") - .ofLongs() - .setUnit("{application}") - .setDescription("Count of applications sending messages to the queue") - .build(); - } - - public static LongGauge createIbmMqOpenOutputCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.open.output.count") - .ofLongs() - .setUnit("{application}") - .setDescription("Count of applications consuming messages from the queue") - .build(); - } - - public static LongGauge createIbmMqHighQueueDepth(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.high.queue.depth") - .ofLongs() - .setUnit("{percent}") - .setDescription("The current high queue depth") - .build(); - } - - public static LongGauge createIbmMqServiceInterval(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.service.interval") - .ofLongs() - .setUnit("{percent}") - .setDescription("The queue service interval") - .build(); - } - - public static LongCounter createIbmMqQueueDepthFullEvent(Meter meter) { - return meter - .counterBuilder("ibm.mq.queue.depth.full.event") - .setUnit("{event}") - .setDescription("The number of full queue events") - .build(); - } - - public static LongCounter createIbmMqQueueDepthHighEvent(Meter meter) { - return meter - .counterBuilder("ibm.mq.queue.depth.high.event") - .setUnit("{event}") - .setDescription("The number of high queue events") - .build(); - } - - public static LongCounter createIbmMqQueueDepthLowEvent(Meter meter) { - return meter - .counterBuilder("ibm.mq.queue.depth.low.event") - .setUnit("{event}") - .setDescription("The number of low queue events") - .build(); - } - - public static LongGauge createIbmMqExpiredMessages(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.expired.messages") - .ofLongs() - .setUnit("{message}") - .setDescription("Number of expired messages") - .build(); - } - - public static LongGauge createIbmMqUncommittedMessages(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.uncommitted.messages") - .ofLongs() - .setUnit("{message}") - .setDescription("Number of uncommitted messages") - .build(); - } - - public static LongGauge createIbmMqOldestMsgAge(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.oldest.msg.age") - .ofLongs() - .setUnit("microseconds") - .setDescription("Queue message oldest age") - .build(); - } - - public static LongGauge createIbmMqCurrentMaxQueueFilesize(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.current.max.queue.filesize") - .ofLongs() - .setUnit("By") - .setDescription("Current maximum queue file size") - .build(); - } - - public static LongGauge createIbmMqCurrentQueueFilesize(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.current.queue.filesize") - .ofLongs() - .setUnit("By") - .setDescription("Current queue file size") - .build(); - } - - public static LongGauge createIbmMqInstancesPerClient(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.instances.per.client") - .ofLongs() - .setUnit("{instance}") - .setDescription("Instances per client") - .build(); - } - - public static LongGauge createIbmMqMessageDeqCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.message.deq.count") - .ofLongs() - .setUnit("{message}") - .setDescription("Message dequeue count") - .build(); - } - - public static LongGauge createIbmMqMessageEnqCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.message.enq.count") - .ofLongs() - .setUnit("{message}") - .setDescription("Message enqueue count") - .build(); - } - - public static LongGauge createIbmMqQueueDepth(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.queue.depth") - .ofLongs() - .setUnit("{message}") - .setDescription("Current queue depth") - .build(); - } - - public static LongGauge createIbmMqServiceIntervalEvent(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.service.interval.event") - .ofLongs() - .setUnit("1") - .setDescription("Queue service interval event") - .build(); - } - - public static LongGauge createIbmMqReusableLogSize(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.reusable.log.size") - .ofLongs() - .setUnit("By") - .setDescription( - "The amount of space occupied, in megabytes, by log extents available to be reused.") - .build(); - } - - public static LongGauge createIbmMqManagerActiveChannels(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.manager.active.channels") - .ofLongs() - .setUnit("{channel}") - .setDescription("The queue manager active maximum channels limit") - .build(); - } - - public static LongGauge createIbmMqRestartLogSize(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.restart.log.size") - .ofLongs() - .setUnit("By") - .setDescription("Size of the log data required for restart recovery in megabytes.") - .build(); - } - - public static LongGauge createIbmMqMaxQueueDepth(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.max.queue.depth") - .ofLongs() - .setUnit("{message}") - .setDescription("Maximum queue depth") - .build(); - } - - public static LongGauge createIbmMqOnqtimeShortPeriod(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.onqtime.short_period") - .ofLongs() - .setUnit("microseconds") - .setDescription( - "Amount of time, in microseconds, that a message spent on the queue, over a short period") - .build(); - } - - public static LongGauge createIbmMqOnqtimeLongPeriod(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.onqtime.long_period") - .ofLongs() - .setUnit("microseconds") - .setDescription( - "Amount of time, in microseconds, that a message spent on the queue, over a longer period") - .build(); - } - - public static LongGauge createIbmMqMessageReceivedCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.message.received.count") - .ofLongs() - .setUnit("{message}") - .setDescription("Number of messages received") - .build(); - } - - public static LongGauge createIbmMqMessageSentCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.message.sent.count") - .ofLongs() - .setUnit("{message}") - .setDescription("Number of messages sent") - .build(); - } - - public static LongGauge createIbmMqMaxInstances(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.max.instances") - .ofLongs() - .setUnit("{instance}") - .setDescription("Max channel instances") - .build(); - } - - public static LongGauge createIbmMqConnectionCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.connection.count") - .ofLongs() - .setUnit("{connection}") - .setDescription("Active connections count") - .build(); - } - - public static LongGauge createIbmMqManagerStatus(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.manager.status") - .ofLongs() - .setUnit("1") - .setDescription("Queue manager status") - .build(); - } - - public static LongGauge createIbmMqHeartbeat(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.heartbeat") - .ofLongs() - .setUnit("1") - .setDescription("Queue manager heartbeat") - .build(); - } - - public static LongCounter createIbmMqQueueManagerUptime(Meter meter) { - return meter - .counterBuilder("ibm.mq.queue_manager.uptime") - .setUnit("s") - .setDescription("Queue manager uptime") - .build(); - } - - public static LongGauge createIbmMqArchiveLogSize(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.archive.log.size") - .ofLongs() - .setUnit("By") - .setDescription("Queue manager archive log size") - .build(); - } - - public static LongGauge createIbmMqManagerMaxActiveChannels(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.manager.max.active.channels") - .ofLongs() - .setUnit("{channel}") - .setDescription("Queue manager max active channels") - .build(); - } - - public static LongGauge createIbmMqManagerStatisticsInterval(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.manager.statistics.interval") - .ofLongs() - .setUnit("1") - .setDescription("Queue manager statistics interval") - .build(); - } - - public static LongGauge createIbmMqPublishCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.publish.count") - .ofLongs() - .setUnit("{publication}") - .setDescription("Topic publication count") - .build(); - } - - public static LongGauge createIbmMqSubscriptionCount(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.subscription.count") - .ofLongs() - .setUnit("{subscription}") - .setDescription("Topic subscription count") - .build(); - } - - public static LongGauge createIbmMqListenerStatus(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.listener.status") - .ofLongs() - .setUnit("1") - .setDescription("Listener status") - .build(); - } - - public static LongCounter createIbmMqUnauthorizedEvent(Meter meter) { - return meter - .counterBuilder("ibm.mq.unauthorized.event") - .setUnit("{event}") - .setDescription("Number of authentication error events") - .build(); - } - - public static LongGauge createIbmMqManagerMaxHandles(Meter meter) { - return meter - .gaugeBuilder("ibm.mq.manager.max.handles") - .ofLongs() - .setUnit("{event}") - .setDescription("Max open handles") - .build(); - } - - public static LongCounter createIbmMqConnectionErrors(Meter meter) { - return meter - .counterBuilder("ibm.mq.connection.errors") - .setUnit("{errors}") - .setDescription("Number of connection errors") - .build(); - } -} From 73f0b2256cbe50debfc79ea4c6e7e2a633f5e01f Mon Sep 17 00:00:00 2001 From: Harshit Kushwaha Date: Wed, 27 May 2026 04:38:30 -0400 Subject: [PATCH 5/5] refactor(ibm-mq-metrics): reorganize imports in WmqMonitor and MetricProducer for clarity Signed-off-by: Harshit Kushwaha --- .../io/opentelemetry/ibm/mq/WmqMonitor.java | 27 +++---- .../ibm/mq/metrics/MetricProducer.java | 74 +++++++++---------- 2 files changed, 49 insertions(+), 52 deletions(-) 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 1aeae0f14..b0ae882ee 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 @@ -5,28 +5,15 @@ package io.opentelemetry.ibm.mq; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.function.Consumer; - -import javax.annotation.Nullable; - -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.ERROR_CODE; +import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.IBM_MQ_QUEUE_MANAGER; import com.fasterxml.jackson.databind.ObjectMapper; import com.ibm.mq.MQException; import com.ibm.mq.MQQueueManager; import com.ibm.mq.headers.pcf.PCFMessageAgent; - import io.opentelemetry.api.common.Attributes; import io.opentelemetry.ibm.mq.config.QueueManager; -import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.ERROR_CODE; -import static io.opentelemetry.ibm.mq.metrics.IbmMqAttributes.IBM_MQ_QUEUE_MANAGER; import io.opentelemetry.ibm.mq.metrics.MetricProducer; import io.opentelemetry.ibm.mq.metrics.MetricsConfig; import io.opentelemetry.ibm.mq.metricscollector.ChannelMetricsCollector; @@ -42,6 +29,16 @@ import io.opentelemetry.ibm.mq.metricscollector.TopicMetricsCollector; import io.opentelemetry.ibm.mq.opentelemetry.ConfigWrapper; import io.opentelemetry.ibm.mq.util.WmqUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.function.Consumer; +import javax.annotation.Nullable; +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public final class WmqMonitor { diff --git a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java index 9901aaaf8..e6860ef09 100644 --- a/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java +++ b/ibm-mq-metrics/src/main/java/io/opentelemetry/ibm/mq/metrics/MetricProducer.java @@ -5,16 +5,9 @@ package io.opentelemetry.ibm.mq.metrics; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.LinkedBlockingDeque; +import static io.opentelemetry.ibm.mq.metrics.MetricData.createMetricData; import io.opentelemetry.api.common.Attributes; -import static io.opentelemetry.ibm.mq.metrics.MetricData.createMetricData; import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; @@ -24,6 +17,13 @@ import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.opentelemetry.sdk.metrics.data.SumData; import io.opentelemetry.sdk.resources.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.LinkedBlockingDeque; // This file is generated using weaver. Do not edit manually. @@ -37,7 +37,7 @@ public final class MetricProducer implements io.opentelemetry.sdk.metrics.export private final Map counterIbmMqQueueDepthHighEvent; private final Map counterIbmMqQueueDepthLowEvent; private final Map counterIbmMqUnauthorizedEvent; - private final Map counterIbmMqQueueManagerUptime; + private final Map counterIbmMqQueueManagerUptime; private final Map counterIbmMqConnectionErrors; private long currentEpochNanos; @@ -670,35 +670,35 @@ public void recordIbmMqHeartbeat(long value, Attributes attributes) { this.currentEpochNanos, Clock.getDefault().now(), attributes, value))))); } - public void addIbmMqQueueManagerUptime(long value, Attributes attributes) { - long cumulativeValue = - this.counterIbmMqQueueManagerUptime.compute( + public void addIbmMqQueueManagerUptime(long value, Attributes attributes) { + long cumulativeValue = + this.counterIbmMqQueueManagerUptime.compute( + attributes, + (k, v) -> { + if (v == null) { + return value; + } else { + return v + value; + } + }); + metricData.add( + createMetricData( + this.resource, + this.instrumentationScopeInfo, + "ibm.mq.queue_manager.uptime", + "Queue manager uptime", + "s", + MetricDataType.LONG_SUM, + SumData.createLongSumData( + /* isMonotonic= */ true, + AggregationTemporality.CUMULATIVE, + Collections.singletonList( + LongPointData.create( + this.currentEpochNanos, + Clock.getDefault().now(), attributes, - (k, v) -> { - if (v == null) { - return value; - } else { - return v + value; - } - }); - metricData.add( - createMetricData( - this.resource, - this.instrumentationScopeInfo, - "ibm.mq.queue_manager.uptime", - "Queue manager uptime", - "s", - MetricDataType.LONG_SUM, - SumData.createLongSumData( - /* isMonotonic= */ true, - AggregationTemporality.CUMULATIVE, - Collections.singletonList( - LongPointData.create( - this.currentEpochNanos, - Clock.getDefault().now(), - attributes, - cumulativeValue))))); - } + cumulativeValue))))); + } public void recordIbmMqArchiveLogSize(long value, Attributes attributes) { metricData.add(