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

mikexue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git


The following commit(s) were added to refs/heads/master by this push:
     new 0164c58b8 [ISSUE #4079]The error of building metric observer: 
java.util.NoSuchElementException
0164c58b8 is described below

commit 0164c58b87b2175d1ac223bd5e4a8a18ff161493
Author: pandaapo <[email protected]>
AuthorDate: Mon Jun 12 19:34:47 2023 +0800

    [ISSUE #4079]The error of building metric observer: 
java.util.NoSuchElementException
---
 .../prometheus/metrics/PrometheusGrpcExporter.java |  4 +-
 .../prometheus/metrics/PrometheusHttpExporter.java |  2 +-
 .../prometheus/metrics/PrometheusTcpExporter.java  |  4 +-
 .../prometheus/utils/PrometheusExporterUtils.java  | 46 +++++++++++++---------
 4 files changed, 33 insertions(+), 23 deletions(-)

diff --git 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusGrpcExporter.java
 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusGrpcExporter.java
index d3846bba1..a3b4afa06 100644
--- 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusGrpcExporter.java
+++ 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusGrpcExporter.java
@@ -59,7 +59,7 @@ public class PrometheusGrpcExporter {
     public static void export(final String meterName, final GrpcSummaryMetrics 
summaryMetrics) {
         final Meter meter = GlobalMeterProvider.getMeter(meterName);
 
-        paramPairs.forEach((k, v) ->
-                observeOfValue(meter, METRICS_GRPC_PREFIX + k[0], k[1], GRPC, 
v.apply(summaryMetrics)));
+        paramPairs.forEach((metricInfo, getMetric) ->
+            observeOfValue(meter, METRICS_GRPC_PREFIX + metricInfo[0], 
metricInfo[1], GRPC, summaryMetrics, getMetric));
     }
 }
diff --git 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusHttpExporter.java
 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusHttpExporter.java
index bba9a89a0..de7bf4670 100644
--- 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusHttpExporter.java
+++ 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusHttpExporter.java
@@ -177,7 +177,7 @@ public class PrometheusHttpExporter {
 
     public void export(String name, HttpSummaryMetrics summaryMetrics) {
         Meter meter = GlobalMeterProvider.getMeter(name);
-        paramPairs.forEach((k, v) -> observeOfValue(meter, k[0], k[1], HTTP, 
v.apply(summaryMetrics)));
+        paramPairs.forEach((metricInfo, getMetric) -> observeOfValue(meter, 
metricInfo[0], metricInfo[1], HTTP, summaryMetrics, getMetric));
     }
 
 }
diff --git 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusTcpExporter.java
 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusTcpExporter.java
index da39828a9..3fe916a82 100644
--- 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusTcpExporter.java
+++ 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/metrics/PrometheusTcpExporter.java
@@ -79,7 +79,7 @@ public class PrometheusTcpExporter {
 
     public void export(final String meterName, final TcpSummaryMetrics 
summaryMetrics) {
         final Meter meter = GlobalMeterProvider.getMeter(meterName);
-        paramPairs.forEach((k, v) ->
-                observeOfValue(meter, METRICS_TCP_PREFIX + k[0], k[1], TCP, 
v.apply(summaryMetrics)));
+        paramPairs.forEach((metricInfo, getMetric) ->
+                observeOfValue(meter, METRICS_TCP_PREFIX + metricInfo[0], 
metricInfo[1], TCP, summaryMetrics, getMetric));
     }
 }
diff --git 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterUtils.java
 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterUtils.java
index f898df057..e387e0d2f 100644
--- 
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterUtils.java
+++ 
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterUtils.java
@@ -17,9 +17,16 @@
 
 package org.apache.eventmesh.metrics.prometheus.utils;
 
+import org.apache.eventmesh.metrics.api.model.Metric;
+
+import java.lang.reflect.Method;
+import java.util.function.Function;
+
 import io.opentelemetry.api.metrics.Meter;
 import io.opentelemetry.api.metrics.common.Labels;
 
+import lombok.SneakyThrows;
+
 /**
  * Utils for metrics-prometheus module
  */
@@ -29,29 +36,32 @@ public class PrometheusExporterUtils {
      * Build the OpenTelemetry's Meter
      *
      * @param meter
-     * @param name
-     * @param desc
+     * @param metricName
+     * @param metricDesc
      * @param protocol
-     * @param number
+     * @param summaryMetrics
+     * @param getMetric
      */
-    public static void observeOfValue(Meter meter, String name, String desc, 
String protocol, Number number) {
-        if (number instanceof Long) {
-            meter.longValueObserverBuilder(name)
-                    .setDescription(desc)
-                    .setUnit(protocol)
-                    .setUpdater(result -> result.observe((long) number, 
Labels.empty()))
-                    .build();
-        } else if (number instanceof Double) {
-            meter.doubleValueObserverBuilder(name)
-                    .setDescription(desc)
-                    .setUnit(protocol)
-                    .setUpdater(result -> result.observe((double) number, 
Labels.empty()))
-                    .build();
+    @SneakyThrows
+    public static void observeOfValue(Meter meter, String metricName, String 
metricDesc, String protocol,
+        Metric summaryMetrics, Function getMetric) {
+        Method method = getMetric.getClass().getMethod("apply", Object.class);
+        Class metricType = (Class) method.getGenericReturnType();
+        if (metricType == Long.class) {
+            meter.longValueObserverBuilder(metricName)
+                .setDescription(metricDesc)
+                .setUnit(protocol)
+                .setUpdater(result -> result.observe((long) 
getMetric.apply(summaryMetrics), Labels.empty()))
+                .build();
+        } else if (metricType == Double.class) {
+            meter.doubleValueObserverBuilder(metricName)
+                .setDescription(metricDesc)
+                .setUnit(protocol)
+                .setUpdater(result -> result.observe((double) 
getMetric.apply(summaryMetrics), Labels.empty()))
+                .build();
         }
     }
 
-
-
     /**
      * create and init an array contains 2 String.
      *


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to