diff --git a/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/PrometheusMetricsTrackerFactory.java b/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/PrometheusMetricsTrackerFactory.java index 59336166de2c32c6d6b26d480fb9e7ac41aae7bd..f7a82a5ac4659dfd743be6c278ab836a855dd043 100644 --- a/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/PrometheusMetricsTrackerFactory.java +++ b/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/PrometheusMetricsTrackerFactory.java @@ -22,7 +22,8 @@ import org.apache.shardingsphere.metrics.api.MetricsTrackerFactory; import org.apache.shardingsphere.metrics.prometheus.impl.counter.RequestTotalCounterMetricsTracker; import org.apache.shardingsphere.metrics.prometheus.impl.counter.SQLStatementCounterMetricsTracker; import org.apache.shardingsphere.metrics.prometheus.impl.counter.ShadowHitTotalCounterMetricsTracker; -import org.apache.shardingsphere.metrics.prometheus.impl.counter.ShardingCounterMetricsTracker; +import org.apache.shardingsphere.metrics.prometheus.impl.counter.ShardingDatasourceCounterMetricsTracker; +import org.apache.shardingsphere.metrics.prometheus.impl.counter.ShardingTableCounterMetricsTracker; import org.apache.shardingsphere.metrics.prometheus.impl.counter.TransactionCounterMetricsTracker; import org.apache.shardingsphere.metrics.prometheus.impl.gauge.ChannelCountGaugeMetricsTracker; import org.apache.shardingsphere.metrics.prometheus.impl.histogram.RequestLatencyHistogramMetricsTracker; @@ -45,7 +46,8 @@ public final class PrometheusMetricsTrackerFactory implements MetricsTrackerFact REGISTER.add(new ChannelCountGaugeMetricsTracker()); REGISTER.add(new RequestLatencyHistogramMetricsTracker()); REGISTER.add(new RequestLatencySummaryMetricsTracker()); - REGISTER.add(new ShardingCounterMetricsTracker()); + REGISTER.add(new ShardingTableCounterMetricsTracker()); + REGISTER.add(new ShardingDatasourceCounterMetricsTracker()); REGISTER.add(new TransactionCounterMetricsTracker()); REGISTER.add(new ShadowHitTotalCounterMetricsTracker()); } diff --git a/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingCounterMetricsTracker.java b/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingDatasourceCounterMetricsTracker.java similarity index 72% rename from sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingCounterMetricsTracker.java rename to sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingDatasourceCounterMetricsTracker.java index 7d5fc22a82e1ba099bde4833700dec7cfa04851d..4c91e912600d4803d99aeb131976cf38b193cf0d 100644 --- a/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingCounterMetricsTracker.java +++ b/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingDatasourceCounterMetricsTracker.java @@ -22,23 +22,19 @@ import org.apache.shardingsphere.metrics.api.CounterMetricsTracker; import org.apache.shardingsphere.metrics.enums.MetricsLabelEnum; /** - * Sharding counter metrics tracker. + * Sharding datasource counter metrics tracker. */ -public final class ShardingCounterMetricsTracker implements CounterMetricsTracker { +public final class ShardingDatasourceCounterMetricsTracker implements CounterMetricsTracker { - private static final Counter SHARDING = Counter.build() - .name("sharding") - .labelNames("datasource", "table") - .help("collect sharding datasource and table count") - .register(); + private static final Counter SHARDING_DATASOURCE = Counter.build().name("sharding_datasource").labelNames("datasource") .help("collect sharding datasource count").register(); @Override public void inc(final double amount, final String... labelValues) { - SHARDING.labels(labelValues).inc(amount); + SHARDING_DATASOURCE.labels(labelValues).inc(amount); } @Override public String metricsLabel() { - return MetricsLabelEnum.SHARDING.getName(); + return MetricsLabelEnum.SHARDING_DATASOURCE.getName(); } } diff --git a/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingTableCounterMetricsTracker.java b/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingTableCounterMetricsTracker.java new file mode 100644 index 0000000000000000000000000000000000000000..74028dc340a4af9d83e9e2ca09f6c098f69f69eb --- /dev/null +++ b/sharding-metrics/sharding-metrics-prometheus/src/main/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingTableCounterMetricsTracker.java @@ -0,0 +1,40 @@ +/* + * 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.metrics.prometheus.impl.counter; + +import io.prometheus.client.Counter; +import org.apache.shardingsphere.metrics.api.CounterMetricsTracker; +import org.apache.shardingsphere.metrics.enums.MetricsLabelEnum; + +/** + * Sharding table counter metrics tracker. + */ +public final class ShardingTableCounterMetricsTracker implements CounterMetricsTracker { + + private static final Counter SHARDING_TABLE = Counter.build().name("sharding_table").labelNames("table") .help("collect sharding table count").register(); + + @Override + public void inc(final double amount, final String... labelValues) { + SHARDING_TABLE.labels(labelValues).inc(amount); + } + + @Override + public String metricsLabel() { + return MetricsLabelEnum.SHARDING_TABLE.getName(); + } +} diff --git a/sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingDatasourceCounterMetricsTrackerTest.java b/sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingDatasourceCounterMetricsTrackerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b23fcb71e0d9abaed7187a62f6106ed543bdd299 --- /dev/null +++ b/sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingDatasourceCounterMetricsTrackerTest.java @@ -0,0 +1,59 @@ +/* + * 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.metrics.prometheus.impl.counter; + +import org.apache.shardingsphere.metrics.enums.MetricsLabelEnum; +import org.apache.shardingsphere.metrics.enums.MetricsTypeEnum; +import org.apache.shardingsphere.metrics.prometheus.impl.AbstractPrometheusCollectorRegistry; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +public final class ShardingDatasourceCounterMetricsTrackerTest extends AbstractPrometheusCollectorRegistry { + + @Test + public void assertShardingCounter() { + ShardingDatasourceCounterMetricsTracker tracker = new ShardingDatasourceCounterMetricsTracker(); + assertThat(tracker.metricsLabel(), is(MetricsLabelEnum.SHARDING_DATASOURCE.getName())); + assertThat(tracker.metricsType(), is(MetricsTypeEnum.COUNTER.name())); + String name = "sharding_datasource"; + String[] labelNames = {"datasource"}; + String[] labelValues0 = {"ds_0"}; + tracker.inc(1.0, labelValues0); + Double ds0 = getCollectorRegistry().getSampleValue(name, labelNames, labelValues0); + assertThat(ds0, is(1.0)); + String[] labelValues1 = {"ds_1"}; + tracker.inc(3.0, labelValues1); + Double ds1 = getCollectorRegistry().getSampleValue(name, labelNames, labelValues1); + assertThat(ds1, is(3.0)); + } + + @Test(expected = IllegalArgumentException.class) + public void assertNoLabels() { + ShardingDatasourceCounterMetricsTracker tracker = new ShardingDatasourceCounterMetricsTracker(); + tracker.inc(1.0); + } + + @Test(expected = IllegalArgumentException.class) + public void assertMoreLabels() { + ShardingDatasourceCounterMetricsTracker tracker = new ShardingDatasourceCounterMetricsTracker(); + tracker.inc(1.0, "ds0", " ds1"); + } +} + diff --git a/sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingCounterMetricsTrackerTest.java b/sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingTableCounterMetricsTrackerTest.java similarity index 75% rename from sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingCounterMetricsTrackerTest.java rename to sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingTableCounterMetricsTrackerTest.java index 55d9c514e4cc6a24f078ae3fc564e2f05c721746..64a405a1be5f573d55b89b42f2ee67e826948a10 100644 --- a/sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingCounterMetricsTrackerTest.java +++ b/sharding-metrics/sharding-metrics-prometheus/src/test/java/org/apache/shardingsphere/metrics/prometheus/impl/counter/ShardingTableCounterMetricsTrackerTest.java @@ -25,20 +25,20 @@ import org.junit.Test; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; -public final class ShardingCounterMetricsTrackerTest extends AbstractPrometheusCollectorRegistry { +public final class ShardingTableCounterMetricsTrackerTest extends AbstractPrometheusCollectorRegistry { @Test public void assertShardingCounter() { - ShardingCounterMetricsTracker tracker = new ShardingCounterMetricsTracker(); - assertThat(tracker.metricsLabel(), is(MetricsLabelEnum.SHARDING.getName())); + ShardingTableCounterMetricsTracker tracker = new ShardingTableCounterMetricsTracker(); + assertThat(tracker.metricsLabel(), is(MetricsLabelEnum.SHARDING_TABLE.getName())); assertThat(tracker.metricsType(), is(MetricsTypeEnum.COUNTER.name())); - String name = "sharding"; - String[] labelNames = {"datasource", "table"}; - String[] labelValues0 = {"ds0", "t_order_0"}; + String name = "sharding_table"; + String[] labelNames = {"table"}; + String[] labelValues0 = {"t_order_0"}; tracker.inc(1.0, labelValues0); Double ds0 = getCollectorRegistry().getSampleValue(name, labelNames, labelValues0); assertThat(ds0, is(1.0)); - String[] labelValues1 = {"ds1", "t_order_1"}; + String[] labelValues1 = {"t_order_1"}; tracker.inc(2.0, labelValues1); Double ds1 = getCollectorRegistry().getSampleValue(name, labelNames, labelValues1); assertThat(ds1, is(2.0)); @@ -46,14 +46,14 @@ public final class ShardingCounterMetricsTrackerTest extends AbstractPrometheusC @Test(expected = IllegalArgumentException.class) public void assertNoLabels() { - ShardingCounterMetricsTracker tracker = new ShardingCounterMetricsTracker(); + ShardingTableCounterMetricsTracker tracker = new ShardingTableCounterMetricsTracker(); tracker.inc(1.0); } @Test(expected = IllegalArgumentException.class) public void assertMoreLabels() { - ShardingCounterMetricsTracker tracker = new ShardingCounterMetricsTracker(); - tracker.inc(1.0, "ds0", "t_order_0", " t_order_1"); + ShardingTableCounterMetricsTracker tracker = new ShardingTableCounterMetricsTracker(); + tracker.inc(1.0, "t_order_0", " t_order_1"); } } diff --git a/sharding-metrics/sharding-metrics-spi/src/main/java/org/apache/shardingsphere/metrics/enums/MetricsLabelEnum.java b/sharding-metrics/sharding-metrics-spi/src/main/java/org/apache/shardingsphere/metrics/enums/MetricsLabelEnum.java index aa9f19ca4c8579b140d31e6d333da0c423d02b56..f9f82fee8601e9d39f271610d1402f8c4cf7c863 100644 --- a/sharding-metrics/sharding-metrics-spi/src/main/java/org/apache/shardingsphere/metrics/enums/MetricsLabelEnum.java +++ b/sharding-metrics/sharding-metrics-spi/src/main/java/org/apache/shardingsphere/metrics/enums/MetricsLabelEnum.java @@ -46,11 +46,16 @@ public enum MetricsLabelEnum { * Request latency metrics label. */ REQUEST_LATENCY("request_latency"), + + /** + * Sharding table metrics label. + */ + SHARDING_TABLE("sharding_table"), /** - * Sharding metrics label. + * Sharding datasource metrics label. */ - SHARDING("sharding"), + SHARDING_DATASOURCE("sharding_datasource"), /** * Transaction metrics label. diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/metrics/MetricsUtils.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/metrics/MetricsUtils.java index 8cd7bcc080a92a36c8dc3934b96cf22015d96bfe..c9a200303a25867901b24b7936d932e17a23a969 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/metrics/MetricsUtils.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/metrics/MetricsUtils.java @@ -42,8 +42,9 @@ public final class MetricsUtils { for (RouteUnit each : routeUnits) { Collection tableMappers = each.getTableMappers(); RouteMapper dataSourceMapper = each.getDataSourceMapper(); + MetricsTrackerFacade.getInstance().counterInc(MetricsLabelEnum.SHARDING_DATASOURCE.getName(), dataSourceMapper.getActualName()); for (RouteMapper table : tableMappers) { - MetricsTrackerFacade.getInstance().counterInc(MetricsLabelEnum.SHARDING.getName(), dataSourceMapper.getActualName(), table.getActualName()); + MetricsTrackerFacade.getInstance().counterInc(MetricsLabelEnum.SHARDING_TABLE.getName(), table.getActualName()); } } }