This is an automated email from the ASF dual-hosted git repository.

zhouxzhan pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new 2246c3253 Add attributesBuilderSupplier for BrokerMetricsManager 
(#6901)
2246c3253 is described below

commit 2246c32537297174a7e7b921031a14de42ffbcb7
Author: Zhouxiang Zhan <[email protected]>
AuthorDate: Thu Jun 15 16:33:11 2023 +0800

    Add attributesBuilderSupplier for BrokerMetricsManager (#6901)
    
    * Add attributesBuilderSupplier for BrokerMetricsManager
    
    * fix
    
    * add initial value
---
 .../broker/metrics/BrokerMetricsManager.java       | 14 +++--
 .../broker/metrics/BrokerMetricsManagerTest.java   | 68 ++++++++++++++++++++++
 2 files changed, 78 insertions(+), 4 deletions(-)

diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java
index 04eb6798a..f0b76107e 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java
@@ -23,10 +23,10 @@ import io.opentelemetry.api.metrics.LongCounter;
 import io.opentelemetry.api.metrics.LongHistogram;
 import io.opentelemetry.api.metrics.Meter;
 import io.opentelemetry.api.metrics.ObservableLongGauge;
+import io.opentelemetry.exporter.logging.LoggingMetricExporter;
 import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
 import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
 import io.opentelemetry.exporter.prometheus.PrometheusHttpServer;
-import io.opentelemetry.exporter.logging.LoggingMetricExporter;
 import io.opentelemetry.sdk.OpenTelemetrySdk;
 import io.opentelemetry.sdk.metrics.Aggregation;
 import io.opentelemetry.sdk.metrics.InstrumentSelector;
@@ -43,6 +43,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.broker.BrokerController;
 import org.apache.rocketmq.broker.client.ConsumerManager;
@@ -61,11 +62,10 @@ import 
org.apache.rocketmq.common.metrics.NopObservableLongGauge;
 import org.apache.rocketmq.common.topic.TopicValidator;
 import org.apache.rocketmq.logging.org.slf4j.Logger;
 import org.apache.rocketmq.logging.org.slf4j.LoggerFactory;
-import org.slf4j.bridge.SLF4JBridgeHandler;
-
 import org.apache.rocketmq.remoting.metrics.RemotingMetricsManager;
 import org.apache.rocketmq.remoting.protocol.header.SendMessageRequestHeader;
 import org.apache.rocketmq.store.MessageStore;
+import org.slf4j.bridge.SLF4JBridgeHandler;
 
 import static 
org.apache.rocketmq.broker.metrics.BrokerMetricsConstant.AGGREGATION_DELTA;
 import static 
org.apache.rocketmq.broker.metrics.BrokerMetricsConstant.COUNTER_CONSUMER_SEND_TO_DLQ_MESSAGES_TOTAL;
@@ -114,6 +114,8 @@ public class BrokerMetricsManager {
     private LoggingMetricExporter loggingMetricExporter;
     private Meter brokerMeter;
 
+    public static Supplier<AttributesBuilder> attributesBuilderSupplier = 
Attributes::builder;
+
     // broker stats metrics
     public static ObservableLongGauge processorWatermark = new 
NopObservableLongGauge();
     public static ObservableLongGauge brokerPermission = new 
NopObservableLongGauge();
@@ -152,7 +154,11 @@ public class BrokerMetricsManager {
     }
 
     public static AttributesBuilder newAttributesBuilder() {
-        AttributesBuilder attributesBuilder = Attributes.builder();
+        AttributesBuilder attributesBuilder;
+        if (attributesBuilderSupplier == null) {
+            attributesBuilderSupplier = Attributes::builder;
+        }
+        attributesBuilder = attributesBuilderSupplier.get();
         LABEL_MAP.forEach(attributesBuilder::put);
         return attributesBuilder;
     }
diff --git 
a/broker/src/test/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManagerTest.java
 
b/broker/src/test/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManagerTest.java
new file mode 100644
index 000000000..11f7ae821
--- /dev/null
+++ 
b/broker/src/test/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManagerTest.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.rocketmq.broker.metrics;
+
+import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.common.AttributesBuilder;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class BrokerMetricsManagerTest {
+
+    @Test
+    public void testNewAttributesBuilder() {
+        Attributes attributes = 
BrokerMetricsManager.newAttributesBuilder().put("a", "b")
+            .build();
+        assertThat(attributes.get(AttributeKey.stringKey("a"))).isEqualTo("b");
+    }
+
+    @Test
+    public void testCustomizedAttributesBuilder() {
+        BrokerMetricsManager.attributesBuilderSupplier = () -> new 
AttributesBuilder() {
+            private AttributesBuilder attributesBuilder = Attributes.builder();
+            @Override
+            public Attributes build() {
+                return attributesBuilder.put("customized", "value").build();
+            }
+
+            @Override
+            public <T> AttributesBuilder put(AttributeKey<Long> key, int 
value) {
+                attributesBuilder.put(key, value);
+                return this;
+            }
+
+            @Override
+            public <T> AttributesBuilder put(AttributeKey<T> key, T value) {
+                attributesBuilder.put(key, value);
+                return this;
+            }
+
+            @Override
+            public AttributesBuilder putAll(Attributes attributes) {
+                attributesBuilder.putAll(attributes);
+                return this;
+            }
+        };
+        Attributes attributes = 
BrokerMetricsManager.newAttributesBuilder().put("a", "b")
+            .build();
+        assertThat(attributes.get(AttributeKey.stringKey("a"))).isEqualTo("b");
+        
assertThat(attributes.get(AttributeKey.stringKey("customized"))).isEqualTo("value");
+    }
+}
\ No newline at end of file

Reply via email to