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 e748f2472 [ISSUE #3912]There are boilerplate codes in
PrometheusTcpExporter, PrometheusHttpExporter (#3916)
e748f2472 is described below
commit e748f24722708f80a45f2aaaaf79fc3e54ccf83a
Author: pandaapo <[email protected]>
AuthorDate: Tue Jun 6 15:05:59 2023 +0800
[ISSUE #3912]There are boilerplate codes in PrometheusTcpExporter,
PrometheusHttpExporter (#3916)
* Replace boilerplate codes with shared method.
* Add comment for new field.
* Fix CI error.
---
.../prometheus/metrics/PrometheusGrpcExporter.java | 45 ++-
.../prometheus/metrics/PrometheusHttpExporter.java | 415 ++++++++-------------
.../prometheus/metrics/PrometheusTcpExporter.java | 110 +++---
.../utils/PrometheusExporterConstants.java | 35 ++
.../prometheus/utils/PrometheusExporterUtils.java | 67 ++++
5 files changed, 332 insertions(+), 340 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 a99da83b6..d3846bba1 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
@@ -17,40 +17,49 @@
package org.apache.eventmesh.metrics.prometheus.metrics;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterConstants.GRPC;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterConstants.METRICS_GRPC_PREFIX;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterUtils.join;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterUtils.observeOfValue;
+
import org.apache.eventmesh.metrics.api.model.GrpcSummaryMetrics;
-import java.util.function.Supplier;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.Meter;
-import io.opentelemetry.api.metrics.common.Labels;
import lombok.experimental.UtilityClass;
@UtilityClass
public class PrometheusGrpcExporter {
- private static final String UNIT = "GRPC";
- private static final String METRICS_NAME_PREFIX = "eventmesh.grpc.";
+ /**
+ * Map structure : [metric name, description of name] -> the method of get
corresponding metric.
+ */
+ private Map<String[], Function<GrpcSummaryMetrics, Number>> paramPairs;
+
+ static {
+ paramPairs = new HashMap<String[], Function<GrpcSummaryMetrics,
Number>>() {
+ {
+ put(join("sub.topic.num", "get sub topic num."),
GrpcSummaryMetrics::getSubscribeTopicNum);
+ put(join("retry.queue.size", "get size of retry queue."),
GrpcSummaryMetrics::getRetrySize);
+
+ put(join("server.tps", "get size of retry queue."),
GrpcSummaryMetrics::getClient2EventMeshTPS);
+ put(join("client.tps", "get tps of eventMesh to mq."),
GrpcSummaryMetrics::getEventMesh2ClientTPS);
- private void observeOfValue(Meter meter, String name, String desc,
Supplier<Long> supplier) {
- meter.doubleValueObserverBuilder(METRICS_NAME_PREFIX + name)
- .setDescription(desc)
- .setUnit(UNIT)
- .setUpdater(result -> result.observe(supplier.get(),
Labels.empty()))
- .build();
+ put(join("mq.provider.tps", "get tps of eventMesh to mq."),
GrpcSummaryMetrics::getEventMesh2MqTPS);
+ put(join("mq.consumer.tps", "get tps of eventMesh to mq."),
GrpcSummaryMetrics::getMq2EventMeshTPS);
+ }
+ };
}
public static void export(final String meterName, final GrpcSummaryMetrics
summaryMetrics) {
final Meter meter = GlobalMeterProvider.getMeter(meterName);
- observeOfValue(meter, "sub.topic.num", "get sub topic num.",
summaryMetrics::getSubscribeTopicNum);
- observeOfValue(meter, "retry.queue.size", "get size of retry queue.",
summaryMetrics::getRetrySize);
-
- observeOfValue(meter, "server.tps", "get size of retry queue.",
summaryMetrics::getClient2EventMeshTPS);
- observeOfValue(meter, "client.tps", "get tps of eventMesh to mq.",
summaryMetrics::getEventMesh2ClientTPS);
-
- observeOfValue(meter, "mq.provider.tps", "get tps of eventMesh to
mq.", summaryMetrics::getEventMesh2MqTPS);
- observeOfValue(meter, "mq.consumer.tps", "get tps of eventMesh to
mq.", summaryMetrics::getMq2EventMeshTPS);
+ paramPairs.forEach((k, v) ->
+ observeOfValue(meter, METRICS_GRPC_PREFIX + k[0], k[1], GRPC,
v.apply(summaryMetrics)));
}
}
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 0f87aa8ea..bba9a89a0 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
@@ -17,282 +17,167 @@
package org.apache.eventmesh.metrics.prometheus.metrics;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterConstants.HTTP;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterUtils.join;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterUtils.observeOfValue;
+
import org.apache.eventmesh.metrics.api.model.HttpSummaryMetrics;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.Meter;
-import io.opentelemetry.api.metrics.common.Labels;
import lombok.experimental.UtilityClass;
@UtilityClass
public class PrometheusHttpExporter {
- public static void export(String name, HttpSummaryMetrics summaryMetrics) {
+ /**
+ * Map structure : [metric name, description of name] -> the method of get
corresponding metric.
+ */
+ private Map<String[], Function<HttpSummaryMetrics, Number>> paramPairs;
+
+ static {
+ paramPairs = new HashMap<String[], Function<HttpSummaryMetrics,
Number>>() {
+ {
+ //maxHTTPTPS
+ put(join("eventmesh.http.request.tps.max", "max TPS of HTTP."),
+ HttpSummaryMetrics::maxHTTPTPS);
+
+ //avgHTTPTPS
+ put(join("eventmesh.http.request.tps.avg", "avg TPS of HTTP."),
+ HttpSummaryMetrics::avgHTTPTPS);
+
+ //maxHTTPCost
+ put(join("eventmesh.http.request.cost.max", "max cost of
HTTP."),
+ HttpSummaryMetrics::maxHTTPCost);
+
+ //avgHTTPCost
+ put(join("eventmesh.http.request.cost.avg", "avg cost of
HTTP."),
+ HttpSummaryMetrics::avgHTTPCost);
+
+ //avgHTTPBodyDecodeCost
+ put(join("eventmesh.http.body.decode.cost.avg", "avg body
decode cost of HTTP."),
+ HttpSummaryMetrics::avgHTTPBodyDecodeCost);
+
+ //httpDiscard
+ put(join("eventmesh.http.request.discard.num", "http request
discard num."),
+ HttpSummaryMetrics::getHttpDiscard);
+
+ //maxBatchSendMsgTPS
+ put(join("eventmesh.batch.send.message.tps.max", "max of batch
send message tps."),
+ HttpSummaryMetrics::maxSendBatchMsgTPS);
+
+ //avgBatchSendMsgTPS
+ put(join("eventmesh.batch.send.message.tps.avg", "avg of batch
send message tps."),
+ HttpSummaryMetrics::avgSendBatchMsgTPS);
+
+ //sum
+ put(join("eventmesh.batch.send.message.num", "sum of batch
send message number."),
+ HttpSummaryMetrics::getSendBatchMsgNumSum);
+
+ //sumFail
+ put(join("eventmesh.batch.send.message.fail.num", "sum of
batch send message fail message number."),
+ HttpSummaryMetrics::getSendBatchMsgFailNumSum);
+
+ //sumFailRate
+ put(join("eventmesh.batch.send.message.fail.rate", "send batch
message fail rate."),
+ HttpSummaryMetrics::getSendBatchMsgFailRate);
+ //discard
+ put(join("eventmesh.batch.send.message.discard.num", "sum of
send batch message discard number."),
+ HttpSummaryMetrics::getSendBatchMsgDiscardNumSum);
+
+ //maxSendMsgTPS
+ put(join("eventmesh.send.message.tps.max", "max of send
message tps."),
+ HttpSummaryMetrics::maxSendMsgTPS);
+
+ //avgSendMsgTPS
+ put(join("eventmesh.send.message.tps.avg", "avg of send
message tps."),
+ HttpSummaryMetrics::avgSendMsgTPS);
+
+ //sum
+ put(join("eventmesh.send.message.num", "sum of send message
number."),
+ HttpSummaryMetrics::getSendMsgNumSum);
+
+ //sumFail
+ put(join("eventmesh.send.message.fail.num", "sum of send
message fail number."),
+ HttpSummaryMetrics::getSendMsgFailNumSum);
+
+ //sumFailRate
+ put(join("eventmesh.send.message.fail.rate", "send message
fail rate."),
+ HttpSummaryMetrics::getSendMsgFailRate);
+
+ //replyMsg
+ put(join("eventmesh.reply.message.num", "sum of reply message
number."),
+ HttpSummaryMetrics::getReplyMsgNumSum);
+
+ //replyFail
+ put(join("eventmesh.reply.message.fail.num", "sum of reply
message fail number."),
+ HttpSummaryMetrics::getReplyMsgFailNumSum);
+
+ //maxPushMsgTPS
+ put(join("eventmesh.push.message.tps.max", "max of push
message tps."),
+ HttpSummaryMetrics::maxPushMsgTPS);
+
+ //avgPushMsgTPS
+ put(join("eventmesh.push.message.tps.avg", "avg of push
message tps."),
+ HttpSummaryMetrics::avgPushMsgTPS);
+
+ //sum
+ put(join("eventmesh.http.push.message.num", "sum of http push
message number."),
+ HttpSummaryMetrics::getHttpPushMsgNumSum);
+ //sumFail
+ put(join("eventmesh.http.push.message.fail.num", "sum of http
push message fail number."),
+ HttpSummaryMetrics::getHttpPushFailNumSum);
+
+ //sumFailRate
+ put(join("eventmesh.http.push.message.fail.rate", "http push
message fail rate."),
+ HttpSummaryMetrics::getHttpPushMsgFailRate);
+
+ //maxClientLatency
+ put(join("eventmesh.http.push.latency.max", "max of http push
latency."),
+ HttpSummaryMetrics::maxHTTPPushLatency);
+
+ //avgClientLatency
+ put(join("eventmesh.http.push.latency.avg", "avg of http push
latency."),
+ HttpSummaryMetrics::avgHTTPPushLatency);
+ //batchMsgQ
+ put(join("eventmesh.batch.message.queue.size", "size of batch
message queue."),
+ HttpSummaryMetrics::getBatchMsgQueueSize);
+
+ //sendMsgQ
+ put(join("eventmesh.send.message.queue.size", "size of send
message queue."),
+ HttpSummaryMetrics::getSendMsgQueueSize);
+
+ //pushMsgQ
+ put(join("eventmesh.push.message.queue.size", "size of push
message queue."),
+ HttpSummaryMetrics::getPushMsgQueueSize);
+
+ //httpRetryQ
+ put(join("eventmesh.http.retry.queue.size", "size of http
retry queue."),
+ HttpSummaryMetrics::getHttpRetryQueueSize);
+
+ //batchAvgSend2MQCost
+ put(join("eventmesh.batch.send.message.cost.avg", "avg of
batch send message cost."),
+ HttpSummaryMetrics::avgBatchSendMsgCost);
+
+ //avgSend2MQCost
+ put(join("eventmesh.send.message.cost.avg", "avg of send
message cost."),
+ HttpSummaryMetrics::avgSendMsgCost);
+
+ //avgReply2MQCost
+ put(join("eventmesh.reply.message.cost.avg", "avg of reply
message cost."),
+ HttpSummaryMetrics::avgReplyMsgCost);
+ }
+ };
+ }
+
+ public void export(String name, HttpSummaryMetrics summaryMetrics) {
Meter meter = GlobalMeterProvider.getMeter(name);
- //maxHTTPTPS
- meter
- .doubleValueObserverBuilder("eventmesh.http.request.tps.max")
- .setDescription("max TPS of HTTP.")
- .setUnit("HTTP")
- .setUpdater(result -> result.observe(summaryMetrics.maxHTTPTPS(),
Labels.empty()))
- .build();
-
- //avgHTTPTPS
- meter
- .doubleValueObserverBuilder("eventmesh.http.request.tps.avg")
- .setDescription("avg TPS of HTTP.")
- .setUnit("HTTP")
- .setUpdater(result -> result.observe(summaryMetrics.avgHTTPTPS(),
Labels.empty()))
- .build();
-
- //maxHTTPCost
- meter
- .longValueObserverBuilder("eventmesh.http.request.cost.max")
- .setDescription("max cost of HTTP.")
- .setUnit("HTTP")
- .setUpdater(result -> result.observe(summaryMetrics.maxHTTPCost(),
Labels.empty()))
- .build();
-
- //avgHTTPCost
- meter
- .doubleValueObserverBuilder("eventmesh.http.request.cost.avg")
- .setDescription("avg cost of HTTP.")
- .setUnit("HTTP")
- .setUpdater(result -> result.observe(summaryMetrics.avgHTTPCost(),
Labels.empty()))
- .build();
-
- //avgHTTPBodyDecodeCost
- meter
- .doubleValueObserverBuilder("eventmesh.http.body.decode.cost.avg")
- .setDescription("avg body decode cost of HTTP.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgHTTPBodyDecodeCost(), Labels.empty()))
- .build();
-
- //httpDiscard
- meter
- .longValueObserverBuilder("eventmesh.http.request.discard.num")
- .setDescription("http request discard num.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getHttpDiscard(), Labels.empty()))
- .build();
-
- //maxBatchSendMsgTPS
- meter
- .doubleValueObserverBuilder("eventmesh.batch.send.message.tps.max")
- .setDescription("max of batch send message tps.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.maxSendBatchMsgTPS(), Labels.empty()))
- .build();
-
- //avgBatchSendMsgTPS
- meter
- .doubleValueObserverBuilder("eventmesh.batch.send.message.tps.avg")
- .setDescription("avg of batch send message tps.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgSendBatchMsgTPS(), Labels.empty()))
- .build();
-
- //sum
- meter
- .doubleValueObserverBuilder("eventmesh.batch.send.message.num")
- .setDescription("sum of batch send message number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendBatchMsgNumSum(), Labels.empty()))
- .build();
-
- //sumFail
- meter
-
.doubleValueObserverBuilder("eventmesh.batch.send.message.fail.num")
- .setDescription("sum of batch send message fail message number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendBatchMsgFailNumSum(), Labels.empty()))
- .build();
-
- //sumFailRate
- meter
-
.doubleValueObserverBuilder("eventmesh.batch.send.message.fail.rate")
- .setDescription("send batch message fail rate.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendBatchMsgFailRate(), Labels.empty()))
- .build();
-
- //discard
- meter
-
.doubleValueObserverBuilder("eventmesh.batch.send.message.discard.num")
- .setDescription("sum of send batch message discard number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendBatchMsgDiscardNumSum(), Labels.empty()))
- .build();
-
- //maxSendMsgTPS
- meter
- .doubleValueObserverBuilder("eventmesh.send.message.tps.max")
- .setDescription("max of send message tps.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.maxSendMsgTPS(), Labels.empty()))
- .build();
-
- //avgSendMsgTPS
- meter
- .doubleValueObserverBuilder("eventmesh.send.message.tps.avg")
- .setDescription("avg of send message tps.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgSendMsgTPS(), Labels.empty()))
- .build();
-
- //sum
- meter
- .doubleValueObserverBuilder("eventmesh.send.message.num")
- .setDescription("sum of send message number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendMsgNumSum(), Labels.empty()))
- .build();
-
- //sumFail
- meter
- .doubleValueObserverBuilder("eventmesh.send.message.fail.num")
- .setDescription("sum of send message fail number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendMsgFailNumSum(), Labels.empty()))
- .build();
-
- //sumFailRate
- meter
- .doubleValueObserverBuilder("eventmesh.send.message.fail.rate")
- .setDescription("send message fail rate.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendMsgFailRate(), Labels.empty()))
- .build();
-
- //replyMsg
- meter
- .doubleValueObserverBuilder("eventmesh.reply.message.num")
- .setDescription("sum of reply message number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getReplyMsgNumSum(), Labels.empty()))
- .build();
-
- //replyFail
- meter
- .doubleValueObserverBuilder("eventmesh.reply.message.fail.num")
- .setDescription("sum of reply message fail number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getReplyMsgFailNumSum(), Labels.empty()))
- .build();
-
- //maxPushMsgTPS
- meter
- .doubleValueObserverBuilder("eventmesh.push.message.tps.max")
- .setDescription("max of push message tps.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.maxPushMsgTPS(), Labels.empty()))
- .build();
-
- //avgPushMsgTPS
- meter
- .doubleValueObserverBuilder("eventmesh.push.message.tps.avg")
- .setDescription("avg of push message tps.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgPushMsgTPS(), Labels.empty()))
- .build();
-
- //sum
- meter
- .doubleValueObserverBuilder("eventmesh.http.push.message.num")
- .setDescription("sum of http push message number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getHttpPushMsgNumSum(), Labels.empty()))
- .build();
-
- //sumFail
- meter
- .doubleValueObserverBuilder("eventmesh.http.push.message.fail.num")
- .setDescription("sum of http push message fail number.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getHttpPushFailNumSum(), Labels.empty()))
- .build();
-
- //sumFailRate
- meter
-
.doubleValueObserverBuilder("eventmesh.http.push.message.fail.rate")
- .setDescription("http push message fail rate.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getHttpPushMsgFailRate(), Labels.empty()))
- .build();
-
- //maxClientLatency
- meter
- .doubleValueObserverBuilder("eventmesh.http.push.latency.max")
- .setDescription("max of http push latency.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.maxHTTPPushLatency(), Labels.empty()))
- .build();
-
- //avgClientLatency
- meter
- .doubleValueObserverBuilder("eventmesh.http.push.latency.avg")
- .setDescription("avg of http push latency.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgHTTPPushLatency(), Labels.empty()))
- .build();
-
- //batchMsgQ
- meter
- .longValueObserverBuilder("eventmesh.batch.message.queue.size")
- .setDescription("size of batch message queue.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getBatchMsgQueueSize(), Labels.empty()))
- .build();
-
- //sendMsgQ
- meter
- .longValueObserverBuilder("eventmesh.send.message.queue.size")
- .setDescription("size of send message queue.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSendMsgQueueSize(), Labels.empty()))
- .build();
-
- //pushMsgQ
- meter
- .longValueObserverBuilder("eventmesh.push.message.queue.size")
- .setDescription("size of push message queue.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getPushMsgQueueSize(), Labels.empty()))
- .build();
-
- //httpRetryQ
- meter
- .longValueObserverBuilder("eventmesh.http.retry.queue.size")
- .setDescription("size of http retry queue.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.getHttpRetryQueueSize(), Labels.empty()))
- .build();
-
- //batchAvgSend2MQCost
- meter
-
.doubleValueObserverBuilder("eventmesh.batch.send.message.cost.avg")
- .setDescription("avg of batch send message cost.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgBatchSendMsgCost(), Labels.empty()))
- .build();
-
- //avgSend2MQCost
- meter
- .doubleValueObserverBuilder("eventmesh.send.message.cost.avg")
- .setDescription("avg of send message cost.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgSendMsgCost(), Labels.empty()))
- .build();
-
- //avgReply2MQCost
- meter
- .doubleValueObserverBuilder("eventmesh.reply.message.cost.avg")
- .setDescription("avg of reply message cost.")
- .setUnit("HTTP")
- .setUpdater(result ->
result.observe(summaryMetrics.avgReplyMsgCost(), Labels.empty()))
- .build();
+ paramPairs.forEach((k, v) -> observeOfValue(meter, k[0], k[1], HTTP,
v.apply(summaryMetrics)));
}
}
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 01edb5549..da39828a9 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
@@ -17,73 +17,69 @@
package org.apache.eventmesh.metrics.prometheus.metrics;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterConstants.METRICS_TCP_PREFIX;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterConstants.TCP;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterUtils.join;
+import static
org.apache.eventmesh.metrics.prometheus.utils.PrometheusExporterUtils.observeOfValue;
+
import org.apache.eventmesh.metrics.api.model.TcpSummaryMetrics;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.Meter;
-import io.opentelemetry.api.metrics.common.Labels;
import lombok.experimental.UtilityClass;
@UtilityClass
public class PrometheusTcpExporter {
- public static void export(final String meterName, final TcpSummaryMetrics
summaryMetrics) {
+ /**
+ * Map structure : [metric name, description of name] -> the method of get
corresponding metric.
+ */
+ private Map<String[], Function<TcpSummaryMetrics, Number>> paramPairs;
+
+ static {
+ paramPairs = new HashMap<String[], Function<TcpSummaryMetrics,
Number>>() {
+ {
+ //retryQueueSize
+ put(join("retry.queue.size", "get size of retry queue."),
+ TcpSummaryMetrics::getRetrySize);
+
+ //client2eventMeshTPS
+ put(join("server.tps", "get tps of client to eventMesh."),
+ TcpSummaryMetrics::getClient2eventMeshTPS);
+
+ //eventMesh2mqTPS
+ put(join("mq.provider.tps", "get tps of eventMesh to mq."),
+ TcpSummaryMetrics::getEventMesh2mqTPS);
+
+ //mq2eventMeshTPS
+ put(join("mq.consumer.tps", "get tps of mq to eventMesh."),
+ TcpSummaryMetrics::getMq2eventMeshTPS);
+
+ //eventMesh2clientTPS
+ put(join("client.tps", "get tps of eventMesh to client."),
+ TcpSummaryMetrics::getEventMesh2clientTPS);
+
+ //allTPS
+ put(join("all.tps", "get all TPS."),
TcpSummaryMetrics::getAllTPS);
+
+ //EventMeshTcpConnectionHandler.connections
+ put(join("connection.num",
"EventMeshTcpConnectionHandler.connections."),
+ TcpSummaryMetrics::getAllConnections);
+
+ //subTopicNum
+ put(join("sub.topic.num", "get sub topic num."),
TcpSummaryMetrics::getSubTopicNum);
+ }
+ };
+ }
+
+ public void export(final String meterName, final TcpSummaryMetrics
summaryMetrics) {
final Meter meter = GlobalMeterProvider.getMeter(meterName);
- //retryQueueSize
- meter.doubleValueObserverBuilder("eventmesh.tcp.retry.queue.size")
- .setDescription("get size of retry queue.")
- .setUnit("TCP")
- .setUpdater(result ->
result.observe(summaryMetrics.getRetrySize(), Labels.empty()))
- .build();
-
- //client2eventMeshTPS
- meter.doubleValueObserverBuilder("eventmesh.tcp.server.tps")
- .setDescription("get tps of client to eventMesh.")
- .setUnit("TCP")
- .setUpdater(result ->
result.observe(summaryMetrics.getClient2eventMeshTPS(), Labels.empty()))
- .build();
-
- //eventMesh2mqTPS
- meter.doubleValueObserverBuilder("eventmesh.tcp.mq.provider.tps")
- .setDescription("get tps of eventMesh to mq.")
- .setUnit("TCP")
- .setUpdater(result ->
result.observe(summaryMetrics.getEventMesh2mqTPS(), Labels.empty()))
- .build();
-
- //mq2eventMeshTPS
- meter.doubleValueObserverBuilder("eventmesh.tcp.mq.consumer.tps")
- .setDescription("get tps of mq to eventMesh.")
- .setUnit("TCP")
- .setUpdater(result ->
result.observe(summaryMetrics.getMq2eventMeshTPS(), Labels.empty()))
- .build();
-
- //eventMesh2clientTPS
- meter.doubleValueObserverBuilder("eventmesh.tcp.client.tps")
- .setDescription("get tps of eventMesh to client.")
- .setUnit("TCP")
- .setUpdater(result ->
result.observe(summaryMetrics.getEventMesh2clientTPS(), Labels.empty()))
- .build();
-
- //allTPS
- meter.doubleValueObserverBuilder("eventmesh.tcp.all.tps")
- .setDescription("get all TPS.")
- .setUnit("TCP")
- .setUpdater(result -> result.observe(summaryMetrics.getAllTPS(),
Labels.empty()))
- .build();
-
- //EventMeshTcpConnectionHandler.connections
- meter.doubleValueObserverBuilder("eventmesh.tcp.connection.num")
- .setDescription("EventMeshTcpConnectionHandler.connections.")
- .setUnit("TCP")
- .setUpdater(result ->
result.observe(summaryMetrics.getAllConnections(), Labels.empty()))
- .build();
-
- //subTopicNum
- meter.doubleValueObserverBuilder("eventmesh.tcp.sub.topic.num")
- .setDescription("get sub topic num.")
- .setUnit("TCP")
- .setUpdater(result ->
result.observe(summaryMetrics.getSubTopicNum(), Labels.empty()))
- .build();
+ paramPairs.forEach((k, v) ->
+ observeOfValue(meter, METRICS_TCP_PREFIX + k[0], k[1], TCP,
v.apply(summaryMetrics)));
}
}
diff --git
a/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterConstants.java
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterConstants.java
new file mode 100644
index 000000000..d1b970569
--- /dev/null
+++
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterConstants.java
@@ -0,0 +1,35 @@
+/*
+ * 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.eventmesh.metrics.prometheus.utils;
+
+/**
+ * Constants in metrics-prometheus module
+ */
+public class PrometheusExporterConstants {
+
+ public static final String HTTP = "HTTP";
+
+ public static final String GRPC = "GRPC";
+
+ public static final String TCP = "TCP";
+
+ public static final String METRICS_GRPC_PREFIX = "eventmesh.grpc.";
+
+ public static final String METRICS_TCP_PREFIX = "eventmesh.tcp.";
+
+}
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
new file mode 100644
index 000000000..f898df057
--- /dev/null
+++
b/eventmesh-metrics-plugin/eventmesh-metrics-prometheus/src/main/java/org/apache/eventmesh/metrics/prometheus/utils/PrometheusExporterUtils.java
@@ -0,0 +1,67 @@
+/*
+ * 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.eventmesh.metrics.prometheus.utils;
+
+import io.opentelemetry.api.metrics.Meter;
+import io.opentelemetry.api.metrics.common.Labels;
+
+/**
+ * Utils for metrics-prometheus module
+ */
+public class PrometheusExporterUtils {
+
+ /**
+ * Build the OpenTelemetry's Meter
+ *
+ * @param meter
+ * @param name
+ * @param desc
+ * @param protocol
+ * @param number
+ */
+ 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();
+ }
+ }
+
+
+
+ /**
+ * create and init an array contains 2 String.
+ *
+ * @param metricName the metric name
+ * @param desc the description of metric
+ * @return
+ */
+ public static String[] join(String metricName, String desc) {
+ String[] array = {metricName, desc};
+ return array;
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]