You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/08/04 05:11:56 UTC
[shardingsphere] branch master updated: Add meta data metrics about
schema count and database count (#11619)
This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new ef45079 Add meta data metrics about schema count and database count (#11619)
ef45079 is described below
commit ef45079f96d9f1ceb23956c5a8e6cd9a99f28549
Author: Dachuan J <46...@users.noreply.github.com>
AuthorDate: Wed Aug 4 13:10:40 2021 +0800
Add meta data metrics about schema count and database count (#11619)
* Add meta data metrics about schema count and database count.
* Fix some code and yaml end line
* Remove log for github build again.
---
.../agent/core/entity/Interceptor.java | 2 +
.../agent/metrics/api/MetricsWrapper.java | 67 ++++++++--------
.../metrics/api/advice/ChannelHandlerAdvice.java | 6 +-
.../api/advice/CommandExecutorTaskAdvice.java | 4 +-
.../metrics/api/advice/PacketCodecAdvice.java | 4 +-
.../metrics/api/advice/SQLRouteEngineAdvice.java | 12 +--
.../advice/ShardingSphereDataSourceAdvice.java} | 21 ++---
.../metrics/api/advice/TransactionAdvice.java | 4 +-
.../agent/metrics/api/constant/MetricIds.java | 8 +-
.../definition/MetricsPluginDefinitionService.java | 18 ++++-
.../agent/metrics/api/util/MetricsUtil.java} | 29 +++----
.../agent/metrics/api/MetricsWrapperTest.java | 26 ++++---
.../agent/metrics/api/fixture/FixtureWrapper.java | 37 ++-------
.../pom.xml | 6 ++
.../prometheus/collector/BuildInfoCollector.java | 32 ++++----
.../collector/MetaDataInfoCollector.java | 91 ++++++++++++++++++++++
.../prometheus/collector/ProxyInfoCollector.java | 37 ++++-----
.../service/PrometheusPluginBootService.java | 2 +
.../metrics/prometheus/wrapper/CounterWrapper.java | 4 +-
.../metrics/prometheus/wrapper/GaugeWrapper.java | 14 +++-
.../prometheus/wrapper/HistogramWrapper.java | 2 +-
.../wrapper/PrometheusWrapperFactory.java | 44 ++++++++++-
.../metrics/prometheus/wrapper/SummaryWrapper.java | 2 +-
.../src/main/resources/metrics.yaml | 19 +++++
.../collector/BuildInfoCollectorTest.java | 4 +-
...torTest.java => MetaDataInfoCollectorTest.java} | 14 ++--
.../prometheus/wrapper/CounterWrapperTest.java | 4 +-
.../prometheus/wrapper/GaugeWrapperTest.java | 4 +-
.../prometheus/wrapper/HistogramWrapperTest.java | 2 +-
.../prometheus/wrapper/SummaryWrapperTest.java | 2 +-
.../src/test/resources/metrics.yaml | 19 +++++
31 files changed, 359 insertions(+), 181 deletions(-)
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/entity/Interceptor.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/entity/Interceptor.java
index f6a8b1e..aa0adcc 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/entity/Interceptor.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/entity/Interceptor.java
@@ -35,5 +35,7 @@ public final class Interceptor {
private String staticAdvice;
+ private String constructAdvice;
+
private LinkedList<TargetPoint> points;
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapper.java
index f219e37..cd07af5 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapper.java
@@ -23,82 +23,77 @@ package org.apache.shardingsphere.agent.metrics.api;
public interface MetricsWrapper {
/**
- * Counter increase by value.
- *
- * @param value value
+ * Metric increase.
*/
- default void counterInc(long value) {
+ default void inc() {
+ inc(1);
}
/**
- * Counter increase by 1L.
+ * Metric increase by value.
+ *
+ * @param value value
*/
- default void counterInc() {
- counterInc(1L);
+ default void inc(double value) {
}
/**
- * Counter increase by value with labels.
+ * Metric increase with labels.
*
- * @param value value
- * @param labels counter labels
+ * @param labels labels
*/
- default void counterInc(long value, String... labels) {
+ default void inc(String... labels) {
+ inc(1, labels);
}
/**
- * Counter increase by 1L with labels.
+ * Metric increase by value with labels.
*
- * @param labels counter labels
+ * @param value value
+ * @param labels labels
*/
- default void counterInc(String... labels) {
- counterInc(1, labels);
+ default void inc(double value, String... labels) {
}
/**
- * Gauge increase by 1L.
+ * Metric decrease.
*/
- default void gaugeInc() {
- gaugeInc(1L);
+ default void dec() {
+ dec(1);
}
/**
- * Gauge increase by value.
+ * Metric decrease by value.
*
- * @param value value
- */
- default void gaugeInc(double value) {
- }
-
- /**
- * Gauge decrease by 1L.
+ * @param value value
*/
- default void gaugeDec() {
- gaugeDec(1L);
+ default void dec(double value) {
}
/**
- * Gauge decrease by value.
+ * Metric decrease with labels.
*
- * @param value value
+ * @param labels counter labels
*/
- default void gaugeDec(double value) {
+ default void dec(String... labels) {
+ dec(1, labels);
}
/**
- * Histogram observed by value.
+ * Metric decrease by value with labels.
*
- * @param value value
+ * @param value value
+ * @param labels labels
*/
- default void histogramObserve(double value) {
+ default void dec(double value, String... labels) {
}
/**
- * Summary observed by value.
+ * Observed by value.
*
* @param value value
*/
- default void summaryObserve(double value) {
+ default void observe(double value) {
}
/**
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/ChannelHandlerAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/ChannelHandlerAdvice.java
index 54beb0c..3416eb6 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/ChannelHandlerAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/ChannelHandlerAdvice.java
@@ -46,11 +46,11 @@ public final class ChannelHandlerAdvice implements InstanceMethodAroundAdvice {
@Override
public void beforeMethod(final AdviceTargetObject target, final Method method, final Object[] args, final MethodInvocationResult result) {
if (CHANNEL_READ.equals(method.getName())) {
- MetricsPool.get(MetricIds.PROXY_REQUEST).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.PROXY_REQUEST).ifPresent(m -> m.inc());
} else if (CHANNEL_ACTIVE.equals(method.getName())) {
- MetricsPool.get(MetricIds.PROXY_COLLECTION).ifPresent(m -> m.gaugeInc());
+ MetricsPool.get(MetricIds.PROXY_COLLECTION).ifPresent(m -> m.inc());
} else if (CHANNEL_INACTIVE.equals(method.getName())) {
- MetricsPool.get(MetricIds.PROXY_COLLECTION).ifPresent(m -> m.gaugeDec());
+ MetricsPool.get(MetricIds.PROXY_COLLECTION).ifPresent(m -> m.dec());
}
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/CommandExecutorTaskAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/CommandExecutorTaskAdvice.java
index 872c36c..1ba94c1 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/CommandExecutorTaskAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/CommandExecutorTaskAdvice.java
@@ -52,12 +52,12 @@ public final class CommandExecutorTaskAdvice implements InstanceMethodAroundAdvi
if (COMMAND_EXECUTOR_RUN.equals(method.getName())) {
try {
long elapsedTime = System.currentTimeMillis() - ElapsedTimeThreadLocal.INSTANCE.get();
- MetricsPool.get(MetricIds.PROXY_EXECUTE_LATENCY_MILLIS).ifPresent(m -> m.histogramObserve(elapsedTime));
+ MetricsPool.get(MetricIds.PROXY_EXECUTE_LATENCY_MILLIS).ifPresent(m -> m.observe(elapsedTime));
} finally {
ElapsedTimeThreadLocal.INSTANCE.remove();
}
} else if (COMMAND_EXECUTOR_EXCEPTION.equals(method.getName())) {
- MetricsPool.get(MetricIds.PROXY_EXECUTE_ERROR).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.PROXY_EXECUTE_ERROR).ifPresent(m -> m.inc());
}
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/PacketCodecAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/PacketCodecAdvice.java
index b465d5c..e50a0f3 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/PacketCodecAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/PacketCodecAdvice.java
@@ -41,7 +41,7 @@ public final class PacketCodecAdvice implements InstanceMethodAroundAdvice {
public void beforeMethod(final AdviceTargetObject target, final Method method, final Object[] args, final MethodInvocationResult result) {
if (METHOD_DECODE.equals(method.getName())) {
ByteBuf in = (ByteBuf) args[1];
- MetricsPool.get(MetricIds.PROXY_REQUEST_BYTES).ifPresent(m -> m.histogramObserve(in.readableBytes()));
+ MetricsPool.get(MetricIds.PROXY_REQUEST_BYTES).ifPresent(m -> m.observe(in.readableBytes()));
}
}
@@ -49,7 +49,7 @@ public final class PacketCodecAdvice implements InstanceMethodAroundAdvice {
public void afterMethod(final AdviceTargetObject target, final Method method, final Object[] args, final MethodInvocationResult result) {
if (METHOD_ENCODE.equals(method.getName())) {
ByteBuf out = (ByteBuf) args[2];
- MetricsPool.get(MetricIds.PROXY_RESPONSE_BYTES).ifPresent(m -> m.histogramObserve(out.readableBytes()));
+ MetricsPool.get(MetricIds.PROXY_RESPONSE_BYTES).ifPresent(m -> m.observe(out.readableBytes()));
}
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/SQLRouteEngineAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/SQLRouteEngineAdvice.java
index e5705ec..b2ea92c 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/SQLRouteEngineAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/SQLRouteEngineAdvice.java
@@ -54,13 +54,13 @@ public final class SQLRouteEngineAdvice implements InstanceMethodAroundAdvice {
LogicSQL logicSQL = (LogicSQL) args[0];
SQLStatement sqlStatement = logicSQL.getSqlStatementContext().getSqlStatement();
if (sqlStatement instanceof InsertStatement) {
- MetricsPool.get(MetricIds.SQL_INSERT).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.SQL_INSERT).ifPresent(m -> m.inc());
} else if (sqlStatement instanceof DeleteStatement) {
- MetricsPool.get(MetricIds.SQL_DELETE).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.SQL_DELETE).ifPresent(m -> m.inc());
} else if (sqlStatement instanceof UpdateStatement) {
- MetricsPool.get(MetricIds.SQL_UPDATE).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.SQL_UPDATE).ifPresent(m -> m.inc());
} else if (sqlStatement instanceof SelectStatement) {
- MetricsPool.get(MetricIds.SQL_SELECT).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.SQL_SELECT).ifPresent(m -> m.inc());
}
}
@@ -72,10 +72,10 @@ public final class SQLRouteEngineAdvice implements InstanceMethodAroundAdvice {
routeUnits.forEach(each -> {
RouteMapper dataSourceMapper = each.getDataSourceMapper();
MetricsPool.get(MetricIds.ROUTE_DATASOURCE)
- .ifPresent(m -> m.counterInc(new String[]{dataSourceMapper.getActualName()}));
+ .ifPresent(m -> m.inc(new String[]{dataSourceMapper.getActualName()}));
each.getTableMappers()
.forEach(table -> MetricsPool.get(MetricIds.ROUTE_TABLE)
- .ifPresent(m -> m.counterInc(new String[]{table.getActualName()})));
+ .ifPresent(m -> m.inc(new String[]{table.getActualName()})));
});
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/ShardingSphereDataSourceAdvice.java
similarity index 63%
copy from shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java
copy to shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/ShardingSphereDataSourceAdvice.java
index 6d58417..1589886 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/ShardingSphereDataSourceAdvice.java
@@ -15,22 +15,17 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.metrics.prometheus.wrapper;
+package org.apache.shardingsphere.agent.metrics.api.advice;
-import io.prometheus.client.Summary;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.agent.metrics.api.MetricsWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.agent.api.advice.AdviceTargetObject;
+import org.apache.shardingsphere.agent.api.advice.ConstructorAdvice;
-/**
- * Prometheus summary wrapper.
- */
-@RequiredArgsConstructor
-public final class SummaryWrapper implements MetricsWrapper {
-
- private final Summary summary;
+@Slf4j
+public final class ShardingSphereDataSourceAdvice implements ConstructorAdvice {
@Override
- public void summaryObserve(final double value) {
- summary.observe(value);
+ public void onConstructor(final AdviceTargetObject target, final Object[] args) {
+ log.info("On construction ShardingSphere DataSource: {}", target);
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/TransactionAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/TransactionAdvice.java
index f6b24cc..394a7b9 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/TransactionAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/advice/TransactionAdvice.java
@@ -43,9 +43,9 @@ public final class TransactionAdvice implements InstanceMethodAroundAdvice {
public void beforeMethod(final AdviceTargetObject target, final Method method, final Object[] args, final MethodInvocationResult result) {
String methodName = method.getName();
if (COMMIT.equals(methodName)) {
- MetricsPool.get(MetricIds.TRANSACTION_COMMIT).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.TRANSACTION_COMMIT).ifPresent(m -> m.inc());
} else if (ROLLBACK.equals(methodName)) {
- MetricsPool.get(MetricIds.TRANSACTION_ROLLBACK).ifPresent(m -> m.counterInc());
+ MetricsPool.get(MetricIds.TRANSACTION_ROLLBACK).ifPresent(m -> m.inc());
}
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/constant/MetricIds.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/constant/MetricIds.java
index 29ac524..98ba24c 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/constant/MetricIds.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/constant/MetricIds.java
@@ -17,7 +17,7 @@
package org.apache.shardingsphere.agent.metrics.api.constant;
-public class MetricIds {
+public final class MetricIds {
public static final String PROXY_REQUEST = "proxy_request_total";
@@ -48,4 +48,10 @@ public class MetricIds {
public static final String TRANSACTION_ROLLBACK = "proxy_transaction_rollback_total";
public static final String HIKARI_SET_METRICS_FACTORY = "hikari_set_metrics_factory";
+
+ public static final String PROXY_INFO = "proxy_info";
+
+ public static final String BUILD_INFO = "build_info";
+
+ public static final String METADATA_INFO = "meta_data_info";
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/definition/MetricsPluginDefinitionService.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/definition/MetricsPluginDefinitionService.java
index 4f9c5b2..fc6c0d7 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/definition/MetricsPluginDefinitionService.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/definition/MetricsPluginDefinitionService.java
@@ -39,20 +39,30 @@ public final class MetricsPluginDefinitionService extends AbstractPluginDefiniti
Yaml yaml = new Yaml();
InputStream in = this.getClass().getResourceAsStream("/interceptors.yaml");
Interceptors interceptors = yaml.loadAs(in, Interceptors.class);
- for (Interceptor interceptor : interceptors.getInterceptors()) {
+ for (Interceptor interceptor : interceptors.getInterceptors()) {
+ if (null == interceptor.getTarget()) {
+ continue;
+ }
+ PluginInterceptorPoint.Builder builder = defineInterceptor(interceptor.getTarget());
+ if (null != interceptor.getConstructAdvice() && !("".equals(interceptor.getConstructAdvice()))) {
+ builder.onConstructor(ElementMatchers.isConstructor()).implement(interceptor.getConstructAdvice()).build();
+ log.debug("Init construct: {}", interceptor.getConstructAdvice());
+ }
+ if (null == interceptor.getPoints()) {
+ continue;
+ }
String[] instancePoints = interceptor
.getPoints()
.stream()
- .filter(i -> i.getType().equals("instance"))
+ .filter(i -> "instance".equals(i.getType()))
.map(TargetPoint::getName)
.toArray(String[]::new);
String[] staticPoints = interceptor
.getPoints()
.stream()
- .filter(i -> i.getType().equals("static"))
+ .filter(i -> "static".equals(i.getType()))
.map(TargetPoint::getName)
.toArray(String[]::new);
- PluginInterceptorPoint.Builder builder = defineInterceptor(interceptor.getTarget());
if (instancePoints.length > 0) {
builder.aroundInstanceMethod(ElementMatchers.namedOneOf(instancePoints))
.implement(interceptor.getInstanceAdvice())
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/util/MetricsUtil.java
similarity index 62%
copy from shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java
copy to shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/util/MetricsUtil.java
index 6d58417..a436b3f 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/util/MetricsUtil.java
@@ -15,22 +15,25 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.metrics.prometheus.wrapper;
-
-import io.prometheus.client.Summary;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.agent.metrics.api.MetricsWrapper;
+package org.apache.shardingsphere.agent.metrics.api.util;
/**
- * Prometheus summary wrapper.
+ * Metrics Utils.
*/
-@RequiredArgsConstructor
-public final class SummaryWrapper implements MetricsWrapper {
-
- private final Summary summary;
+public final class MetricsUtil {
- @Override
- public void summaryObserve(final double value) {
- summary.observe(value);
+ /**
+ * check if it has proxy class.
+ *
+ * @param className the class name
+ * @return true if it has proxy class by the class name, otherwise false
+ */
+ public static boolean classExist(final String className) {
+ try {
+ Class.forName(className);
+ } catch (ClassNotFoundException ex) {
+ return false;
+ }
+ return true;
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapperTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapperTest.java
index f251b66..d93ebe7 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapperTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/MetricsWrapperTest.java
@@ -27,25 +27,31 @@ public final class MetricsWrapperTest {
@Test
public void assertCreate() {
MetricsWrapper metricsWrapper = new FixtureWrapper();
- metricsWrapper.counterInc();
+ metricsWrapper.inc();
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(1.0d));
- metricsWrapper.counterInc(1);
+ metricsWrapper.inc(1);
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(2.0d));
- metricsWrapper.counterInc("a");
+ metricsWrapper.inc("a");
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(3.0d));
- metricsWrapper.counterInc(1, "b");
+ metricsWrapper.inc(1, "b");
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(4.0d));
- metricsWrapper.gaugeInc();
+ metricsWrapper.inc();
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(5.0d));
- metricsWrapper.gaugeDec();
+ metricsWrapper.dec();
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(4.0d));
- metricsWrapper.gaugeInc(1);
+ metricsWrapper.inc(1);
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(5.0d));
- metricsWrapper.gaugeDec(1);
+ metricsWrapper.dec(1);
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(4.0d));
- metricsWrapper.histogramObserve(2);
+ metricsWrapper.dec(1);
+ assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(3.0d));
+ metricsWrapper.dec("c");
+ assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(2.0d));
+ metricsWrapper.dec(1, "d");
+ assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(1.0d));
+ metricsWrapper.observe(2);
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(2.0d));
- metricsWrapper.summaryObserve(3);
+ metricsWrapper.observe(3);
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(3.0d));
metricsWrapper.delegate(1);
assertThat(((FixtureWrapper) metricsWrapper).getFixtureValue(), org.hamcrest.Matchers.is(-1.0d));
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/fixture/FixtureWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/fixture/FixtureWrapper.java
index c9bbfaa..a976da0 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/fixture/FixtureWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/fixture/FixtureWrapper.java
@@ -29,52 +29,27 @@ public final class FixtureWrapper implements MetricsWrapper {
private Double fixtureValue = 0.0d;
@Override
- public void counterInc(final long value) {
+ public void inc(final double value) {
fixtureValue += value;
}
@Override
- public void counterInc() {
- counterInc(1L);
- }
-
- @Override
- public void counterInc(final long value, final String... labels) {
- fixtureValue += value;
- }
-
- @Override
- public void counterInc(final String... labels) {
- counterInc(1, labels);
- }
-
- @Override
- public void gaugeInc() {
- gaugeInc(1L);
- }
-
- @Override
- public void gaugeInc(final double value) {
+ public void inc(final double value, final String... labels) {
fixtureValue += value;
}
-
- @Override
- public void gaugeDec() {
- gaugeDec(1L);
- }
@Override
- public void gaugeDec(final double value) {
+ public void dec(final double value) {
fixtureValue -= value;
}
@Override
- public void histogramObserve(final double value) {
- fixtureValue = value;
+ public void dec(final double value, final String... labels) {
+ fixtureValue -= value;
}
@Override
- public void summaryObserve(final double value) {
+ public void observe(final double value) {
fixtureValue = value;
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/pom.xml b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/pom.xml
index 4f51edc..596a360 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/pom.xml
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/pom.xml
@@ -71,6 +71,12 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-infra-context</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollector.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollector.java
index d69c6cf..9a84f86 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollector.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollector.java
@@ -20,10 +20,13 @@ package org.apache.shardingsphere.agent.metrics.prometheus.collector;
import io.prometheus.client.Collector;
import io.prometheus.client.GaugeMetricFamily;
import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.agent.metrics.api.constant.MetricIds;
+import org.apache.shardingsphere.agent.metrics.prometheus.wrapper.PrometheusWrapperFactory;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
+import java.util.Optional;
/**
* Build info collector.
@@ -31,26 +34,29 @@ import java.util.List;
@Slf4j
public final class BuildInfoCollector extends Collector {
+ private static final String PROXY_BOOTSTRAP_CLASS_STR = "org.apache.shardingsphere.proxy.Bootstrap";
+
+ private static final PrometheusWrapperFactory FACTORY = new PrometheusWrapperFactory();
+
@Override
public List<MetricFamilySamples> collect() {
List<MetricFamilySamples> result = new LinkedList<>();
- GaugeMetricFamily artifactInfo = new GaugeMetricFamily(
- "build_info",
- "A metric with a constant '1' value labeled with the version of shardingsphere.",
- Arrays.asList("version", "name"));
- Package pkg = getClass().getPackage();
- String version = pkg.getImplementationVersion();
- String name = pkg.getImplementationTitle();
- artifactInfo.addMetric(Arrays.asList(null != version ? version : "unknown", null != name ? name : "unknown"), 1L);
+ Optional<GaugeMetricFamily> artifactInfo = FACTORY.createGaugeMetricFamily(MetricIds.BUILD_INFO);
+ Package pluginPkg = getClass().getPackage();
+ final String pluginVersion = pluginPkg.getImplementationVersion();
+ final String pluginName = pluginPkg.getImplementationTitle();
+ artifactInfo.ifPresent(m ->
+ m.addMetric(Arrays.asList(null != pluginVersion ? pluginVersion : "unknown", null != pluginName ? pluginName : "unknown"), 1L));
try {
- pkg = Class.forName("org.apache.shardingsphere.proxy.Bootstrap").getPackage();
- version = pkg.getImplementationVersion();
- name = pkg.getImplementationTitle();
- artifactInfo.addMetric(Arrays.asList(null != version ? version : "unknown", null != name ? name : "unknown"), 1L);
+ Package proxyPkg = Class.forName(PROXY_BOOTSTRAP_CLASS_STR).getPackage();
+ final String proxyVersion = proxyPkg.getImplementationVersion();
+ final String proxyName = proxyPkg.getImplementationTitle();
+ artifactInfo.ifPresent(m ->
+ m.addMetric(Arrays.asList(null != proxyVersion ? proxyVersion : "unknown", null != proxyName ? proxyName : "unknown"), 1L));
} catch (ClassNotFoundException ex) {
log.warn("No proxy class find");
}
- result.add(artifactInfo);
+ artifactInfo.ifPresent(m -> result.add(m));
return result;
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/MetaDataInfoCollector.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/MetaDataInfoCollector.java
new file mode 100644
index 0000000..95caaaa
--- /dev/null
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/MetaDataInfoCollector.java
@@ -0,0 +1,91 @@
+/*
+ * 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.shardingsphere.agent.metrics.prometheus.collector;
+
+import com.zaxxer.hikari.HikariDataSource;
+import io.prometheus.client.Collector;
+import io.prometheus.client.GaugeMetricFamily;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.agent.metrics.api.constant.MetricIds;
+import org.apache.shardingsphere.agent.metrics.api.util.MetricsUtil;
+import org.apache.shardingsphere.agent.metrics.prometheus.wrapper.PrometheusWrapperFactory;
+import org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+
+import javax.sql.DataSource;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * Meta data collector.
+ */
+@Slf4j
+public final class MetaDataInfoCollector extends Collector {
+
+ private static final String LOGIC_DB_COUNT = "schema_count";
+
+ private static final String ACTUAL_DB_COUNT = "database_count";
+
+ private static final PrometheusWrapperFactory FACTORY = new PrometheusWrapperFactory();
+
+ private static final String PROXY_CONTEXT_CLASS_STR = "org.apache.shardingsphere.proxy.backend.context.ProxyContext";
+
+ @Override
+ public List<MetricFamilySamples> collect() {
+ List<MetricFamilySamples> result = new LinkedList<>();
+ Optional<GaugeMetricFamily> metaDataInfo = FACTORY.createGaugeMetricFamily(MetricIds.METADATA_INFO);
+ collectProxy(metaDataInfo);
+ metaDataInfo.ifPresent(m -> result.add(m));
+ return result;
+ }
+
+ private void collectProxy(final Optional<GaugeMetricFamily> metricFamily) {
+ if (!MetricsUtil.classExist(PROXY_CONTEXT_CLASS_STR)) {
+ return;
+ }
+ StandardMetaDataContexts metaDataContexts = (StandardMetaDataContexts) ProxyContext.getInstance().getMetaDataContexts();
+ metricFamily.ifPresent(m -> m.addMetric(Collections.singletonList(LOGIC_DB_COUNT), metaDataContexts.getMetaDataMap().size()));
+ metricFamily.ifPresent(m -> {
+ Map databaseMap = new HashMap<>();
+ metaDataContexts.getMetaDataMap().values().forEach(d ->
+ d.getResource().getDataSources().values().forEach(ds ->
+ countDatabase(databaseMap, ds)));
+ m.addMetric(Collections.singletonList(ACTUAL_DB_COUNT), databaseMap.size());
+ });
+ }
+
+ private void countDatabase(final Map map, final DataSource dataSource) {
+ if (dataSource instanceof HikariDataSource) {
+ String jdbcUrl = ((HikariDataSource) dataSource).getJdbcUrl();
+ try {
+ URI uri = new URI(jdbcUrl.substring(5));
+ if (null != uri.getPath()) {
+ map.put(uri.getPath(), "");
+ }
+ } catch (URISyntaxException | NullPointerException e) {
+ log.info("Unsupported jdbc url by URI: {}", jdbcUrl);
+ }
+ }
+ }
+}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java
index 6cf096b..021f150 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java
@@ -19,13 +19,17 @@ package org.apache.shardingsphere.agent.metrics.prometheus.collector;
import io.prometheus.client.Collector;
import io.prometheus.client.GaugeMetricFamily;
+import org.apache.shardingsphere.agent.metrics.api.constant.MetricIds;
+import org.apache.shardingsphere.agent.metrics.api.util.MetricsUtil;
+import org.apache.shardingsphere.agent.metrics.prometheus.wrapper.PrometheusWrapperFactory;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.frontend.ShardingSphereProxy;
import java.util.Arrays;
-import java.util.Date;
import java.util.LinkedList;
import java.util.List;
+import java.util.Optional;
+import java.util.Date;
/**
* Proxy info collector.
@@ -36,33 +40,26 @@ public final class ProxyInfoCollector extends Collector {
private static final String PROXY_UP_TIME = "uptime";
+ private static final String PROXY_CLASS_STR = "org.apache.shardingsphere.proxy.frontend.ShardingSphereProxy";
+
+ private static final PrometheusWrapperFactory FACTORY = new PrometheusWrapperFactory();
+
@Override
- public List<Collector.MetricFamilySamples> collect() {
+ public List<MetricFamilySamples> collect() {
List<MetricFamilySamples> result = new LinkedList<>();
- if (!checkProxy()) {
+ if (!MetricsUtil.classExist(PROXY_CLASS_STR)) {
return result;
}
- GaugeMetricFamily proxyInfo = new GaugeMetricFamily(
- "proxy_info",
- "Proxy information.",
- Arrays.asList("name"));
- proxyInfo.addMetric(Arrays.asList(PROXY_STATE), ProxyContext.getInstance().getStateContext().getCurrentState().ordinal());
+ Optional<GaugeMetricFamily> proxyInfo = FACTORY.createGaugeMetricFamily(MetricIds.PROXY_INFO);
+ proxyInfo.ifPresent(m ->
+ m.addMetric(Arrays.asList(PROXY_STATE), ProxyContext.getInstance().getStateContext().getCurrentState().ordinal()));
Date now = new Date();
if (0 >= ShardingSphereProxy.getStartTime()) {
- proxyInfo.addMetric(Arrays.asList(PROXY_UP_TIME), 0);
+ proxyInfo.ifPresent(m -> m.addMetric(Arrays.asList(PROXY_UP_TIME), 0));
} else {
- proxyInfo.addMetric(Arrays.asList(PROXY_UP_TIME), now.getTime() - ShardingSphereProxy.getStartTime());
+ proxyInfo.ifPresent(m -> m.addMetric(Arrays.asList(PROXY_UP_TIME), now.getTime() - ShardingSphereProxy.getStartTime()));
}
- result.add(proxyInfo);
+ proxyInfo.ifPresent(m -> result.add(m));
return result;
}
-
- private boolean checkProxy() {
- try {
- Class.forName("org.apache.shardingsphere.proxy.frontend.ShardingSphereProxy");
- } catch (ClassNotFoundException ex) {
- return false;
- }
- return true;
- }
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/service/PrometheusPluginBootService.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/service/PrometheusPluginBootService.java
index de5bfa7..b6d5e60 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/service/PrometheusPluginBootService.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/service/PrometheusPluginBootService.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.agent.config.PluginConfiguration;
import org.apache.shardingsphere.agent.exception.PluginConfigurationException;
import org.apache.shardingsphere.agent.metrics.api.MetricsPool;
import org.apache.shardingsphere.agent.metrics.prometheus.collector.BuildInfoCollector;
+import org.apache.shardingsphere.agent.metrics.prometheus.collector.MetaDataInfoCollector;
import org.apache.shardingsphere.agent.metrics.prometheus.collector.ProxyInfoCollector;
import org.apache.shardingsphere.agent.metrics.prometheus.wrapper.PrometheusWrapperFactory;
import org.apache.shardingsphere.agent.spi.boot.PluginBootService;
@@ -88,6 +89,7 @@ public final class PrometheusPluginBootService implements PluginBootService {
private void registerDefault() {
new ProxyInfoCollector().register();
new BuildInfoCollector().register();
+ new MetaDataInfoCollector().register();
}
private void registerJvm(final boolean enabled) {
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapper.java
index 86e813e..7eb852f 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapper.java
@@ -30,12 +30,12 @@ public final class CounterWrapper implements MetricsWrapper {
private final Counter counter;
@Override
- public void counterInc(final long value) {
+ public void inc(final double value) {
counter.inc(value);
}
@Override
- public void counterInc(final long value, final String... labels) {
+ public void inc(final double value, final String... labels) {
counter.labels(labels).inc(value);
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapper.java
index ce4d0bc..67801dc 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapper.java
@@ -30,12 +30,22 @@ public final class GaugeWrapper implements MetricsWrapper {
private final Gauge gauge;
@Override
- public void gaugeInc(final double value) {
+ public void inc(final double value) {
gauge.inc(value);
}
@Override
- public void gaugeDec(final double value) {
+ public void inc(final double value, final String... labels) {
+ gauge.labels(labels).inc(value);
+ }
+
+ @Override
+ public void dec(final double value) {
gauge.dec(value);
}
+
+ @Override
+ public void dec(final double value, final String... labels) {
+ gauge.labels(labels).dec(value);
+ }
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapper.java
index 637285f..e42a7b8 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapper.java
@@ -30,7 +30,7 @@ public final class HistogramWrapper implements MetricsWrapper {
private final Histogram histogram;
@Override
- public void histogramObserve(final double value) {
+ public void observe(final double value) {
histogram.observe(value);
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/PrometheusWrapperFactory.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/PrometheusWrapperFactory.java
index b77093e..ff2ad71 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/PrometheusWrapperFactory.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/PrometheusWrapperFactory.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.metrics.prometheus.wrapper;
import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
+import io.prometheus.client.GaugeMetricFamily;
import io.prometheus.client.Histogram;
import io.prometheus.client.Summary;
import lombok.extern.slf4j.Slf4j;
@@ -52,9 +53,44 @@ public final class PrometheusWrapperFactory implements MetricsWrapperFactory {
return createById(id);
}
+ /**
+ * Create the gauge metric family.
+ *
+ * @param id string
+ * @return the optional of gauge metric family
+ */
+ public Optional<GaugeMetricFamily> createGaugeMetricFamily(final String id) {
+ Optional<Map> metricMap = findById(id);
+ if (!metricMap.isPresent()) {
+ return Optional.empty();
+ }
+ Map metric = metricMap.get();
+ if (null == getType(metric)) {
+ return Optional.empty();
+ }
+ switch (getType(metric).toUpperCase()) {
+ case "GAUGEMETRICFAMILY":
+ return createGaugeMetricFamily(metric);
+ default:
+ return Optional.empty();
+ }
+ }
+
+ private Optional<GaugeMetricFamily> createGaugeMetricFamily(final Map metric) {
+ if (null != getLabels(metric)) {
+ return Optional.of(new GaugeMetricFamily(getName(metric), getHelp(metric), getLabels(metric)));
+ } else {
+ return Optional.of(new GaugeMetricFamily(getName(metric), getHelp(metric), 1));
+ }
+ }
+
private Optional<MetricsWrapper> createById(final String id) {
- Map metric = findById(id);
- if (null == metric || null == getType(metric)) {
+ Optional<Map> metricMap = findById(id);
+ if (!metricMap.isPresent()) {
+ return Optional.empty();
+ }
+ Map metric = metricMap.get();
+ if (null == getType(metric)) {
return Optional.empty();
}
switch (getType(metric).toUpperCase()) {
@@ -142,8 +178,8 @@ public final class PrometheusWrapperFactory implements MetricsWrapperFactory {
}
}
- private Map findById(final String id) {
- return (Map) metrics.stream().filter(m -> getId((Map) m).equals(id)).findFirst().get();
+ private Optional<Map> findById(final String id) {
+ return metrics.stream().filter(m -> id.equals(getId((Map) m))).findFirst();
}
private String getId(final Map metric) {
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java
index 6d58417..d109cd4 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapper.java
@@ -30,7 +30,7 @@ public final class SummaryWrapper implements MetricsWrapper {
private final Summary summary;
@Override
- public void summaryObserve(final double value) {
+ public void observe(final double value) {
summary.observe(value);
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/resources/metrics.yaml b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/resources/metrics.yaml
index 0968054..5a22019 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/resources/metrics.yaml
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/resources/metrics.yaml
@@ -98,3 +98,22 @@ metrics:
name: proxy_transaction_rollback_total
type: COUNTER
help: the shardingsphere proxy transaction rollback count total
+ - id: proxy_info
+ name: proxy_info
+ type: GaugeMetricFamily
+ help: proxy information
+ labels:
+ - name
+ - id: build_info
+ name: build_info
+ type: GaugeMetricFamily
+ help: build information
+ labels:
+ - version
+ - name
+ - id: meta_data_info
+ name: meta_data_info
+ type: GaugeMetricFamily
+ help: meta data information
+ labels:
+ - name
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollectorTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollectorTest.java
index 515ca14..1f12a1c 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollectorTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollectorTest.java
@@ -22,7 +22,7 @@ import org.junit.Test;
import java.util.List;
-import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertFalse;
public final class BuildInfoCollectorTest {
@@ -30,6 +30,6 @@ public final class BuildInfoCollectorTest {
public void assertCollect() {
BuildInfoCollector buildInfoCollector = new BuildInfoCollector();
List<MetricFamilySamples> metricFamilySamples = buildInfoCollector.collect();
- assertThat(metricFamilySamples.size(), org.hamcrest.Matchers.greaterThan(0));
+ assertFalse(metricFamilySamples.isEmpty());
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollectorTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/MetaDataInfoCollectorTest.java
similarity index 71%
copy from shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollectorTest.java
copy to shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/MetaDataInfoCollectorTest.java
index 515ca14..905a14a 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/BuildInfoCollectorTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/MetaDataInfoCollectorTest.java
@@ -17,19 +17,19 @@
package org.apache.shardingsphere.agent.metrics.prometheus.collector;
-import io.prometheus.client.Collector.MetricFamilySamples;
+import io.prometheus.client.Collector;
import org.junit.Test;
import java.util.List;
-import static org.junit.Assert.assertThat;
-
-public final class BuildInfoCollectorTest {
+import static org.junit.Assert.assertFalse;
+public final class MetaDataInfoCollectorTest {
+
@Test
public void assertCollect() {
- BuildInfoCollector buildInfoCollector = new BuildInfoCollector();
- List<MetricFamilySamples> metricFamilySamples = buildInfoCollector.collect();
- assertThat(metricFamilySamples.size(), org.hamcrest.Matchers.greaterThan(0));
+ MetaDataInfoCollector metaDataInfoCollector = new MetaDataInfoCollector();
+ List<Collector.MetricFamilySamples> metricFamilySamples = metaDataInfoCollector.collect();
+ assertFalse(metricFamilySamples.isEmpty());
}
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapperTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapperTest.java
index 7a9e071..99bf840 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapperTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/CounterWrapperTest.java
@@ -28,8 +28,8 @@ public final class CounterWrapperTest {
public void assertCreate() {
Counter counter = Counter.build().name("a").help("help").create();
CounterWrapper counterWrapper = new CounterWrapper(counter);
- counterWrapper.counterInc();
- counterWrapper.counterInc(1);
+ counterWrapper.inc();
+ counterWrapper.inc(1);
counter = (Counter) ReflectiveUtil.getFieldValue(counterWrapper, "counter");
org.hamcrest.MatcherAssert.assertThat(counter.get(), Matchers.is(2.0));
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapperTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapperTest.java
index bb0064d..d34941c 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapperTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/GaugeWrapperTest.java
@@ -28,8 +28,8 @@ public final class GaugeWrapperTest {
public void assertCreate() {
Gauge gauge = Gauge.build().name("a").help("help").create();
GaugeWrapper gaugeWrapper = new GaugeWrapper(gauge);
- gaugeWrapper.gaugeInc();
- gaugeWrapper.gaugeInc(1);
+ gaugeWrapper.inc();
+ gaugeWrapper.inc(1);
gauge = (Gauge) ReflectiveUtil.getFieldValue(gaugeWrapper, "gauge");
org.hamcrest.MatcherAssert.assertThat(gauge.get(), Matchers.is(2.0));
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapperTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapperTest.java
index b4cd78f..dbf5f82 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapperTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/HistogramWrapperTest.java
@@ -29,7 +29,7 @@ public final class HistogramWrapperTest {
public void assertCreate() {
Histogram histogram = Histogram.build().name("a").help("help").create();
HistogramWrapper histogramWrapper = new HistogramWrapper(histogram);
- histogramWrapper.histogramObserve(1);
+ histogramWrapper.observe(1);
histogram = (Histogram) ReflectiveUtil.getFieldValue(histogramWrapper, "histogram");
assertEquals(histogram.collect().size(), 1);
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapperTest.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapperTest.java
index 8dd1357..0f8690c 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapperTest.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/wrapper/SummaryWrapperTest.java
@@ -29,7 +29,7 @@ public final class SummaryWrapperTest {
public void assertCreate() {
Summary summary = Summary.build().name("a").help("help").create();
SummaryWrapper summaryWrapper = new SummaryWrapper(summary);
- summaryWrapper.summaryObserve(1);
+ summaryWrapper.observe(1);
summary = (Summary) ReflectiveUtil.getFieldValue(summaryWrapper, "summary");
assertEquals(summary.collect().size(), 1);
}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/resources/metrics.yaml b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/resources/metrics.yaml
index 4bd4059..ac4545a 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/resources/metrics.yaml
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/resources/metrics.yaml
@@ -60,3 +60,22 @@ metrics:
type: DELEGATE
name:
help:
+ - id: proxy_info
+ name: proxy_info
+ type: GaugeMetricFamily
+ help: proxy information
+ labels:
+ - name
+ - id: build_info
+ name: build_info
+ type: GaugeMetricFamily
+ help: build information
+ labels:
+ - version
+ - name
+ - id: meta_data_info
+ name: meta_data_info
+ type: GaugeMetricFamily
+ help: meta data information
+ labels:
+ - name