This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 1e690ee Agent metrics spi (#8521)
1e690ee is described below
commit 1e690eef2a7f82ebe5111a9477cf51d82babb25c
Author: xiaoyu <[email protected]>
AuthorDate: Mon Dec 7 19:41:16 2020 +0800
Agent metrics spi (#8521)
* Add agent metrics spi
* refactor name
* fix checkstyle
* spi refactor
* refactor code
---
.../agent/bootstrap/ShardingSphereAgent.java | 14 +++----
.../agent/core/ShardingSphereTransformer.java | 18 ++++-----
...AgentPathLocator.java => AgentPathBuilder.java} | 16 ++++++--
.../agent/core/config/AgentConfiguration.java | 2 +
.../core/config/AgentConfigurationLoader.java | 4 +-
.../AgentServiceProviderNotFoundException.java} | 29 +++++---------
.../{PluginLoader.java => AgentPluginLoader.java} | 16 ++++----
.../core/{utils => spi}/AgentServiceLoader.java | 7 ++--
.../agent/core/spi/AgentTypedSPI.java} | 14 +++----
.../agent/core/spi/AgentTypedSPIRegistry.java | 46 ++++++++++++++++++++++
.../shardingsphere-agent-plugins/pom.xml | 6 +++
.../agent/metrics/api/MetricsProvider.java | 10 +++--
.../agent/metrics/api/MetricsRegisterFactory.java | 4 +-
.../api/prometheus/PrometheusMetricsRegister.java | 15 ++++++-
.../PrometheusMetricsRegisterFactory.java | 5 +++
.../agent/plugin/trace/SamplePluginDefinition.java | 5 +--
16 files changed, 140 insertions(+), 71 deletions(-)
diff --git
a/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
b/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
index 90bfbc8..767cb0d 100644
---
a/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
+++
b/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
@@ -26,7 +26,7 @@ import org.apache.shardingsphere.agent.core.LoggingListener;
import org.apache.shardingsphere.agent.core.ShardingSphereTransformer;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
import org.apache.shardingsphere.agent.core.config.AgentConfigurationLoader;
-import org.apache.shardingsphere.agent.core.plugin.PluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
import java.io.IOException;
@@ -53,14 +53,14 @@ public class ShardingSphereAgent {
.ignore(ElementMatchers.isSynthetic())
.or(ElementMatchers.nameStartsWith("org.apache.shardingsphere.agent."))
.or(ElementMatchers.not(ElementMatchers.nameStartsWith("org.apache.shardingsphere.")));
- PluginLoader pluginLoader = PluginLoader.getInstance();
- pluginLoader.initialAllServices();
- builder.type(pluginLoader.typeMatcher())
- .transform(new ShardingSphereTransformer(pluginLoader))
+ AgentPluginLoader agentPluginLoader = AgentPluginLoader.getInstance();
+ agentPluginLoader.initialAllServices();
+ builder.type(agentPluginLoader.typeMatcher())
+ .transform(new ShardingSphereTransformer(agentPluginLoader))
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(new LoggingListener())
.installOn(instrumentation);
- pluginLoader.startAllServices();
- Runtime.getRuntime().addShutdownHook(new
Thread(pluginLoader::shutdownAllServices));
+ agentPluginLoader.startAllServices();
+ Runtime.getRuntime().addShutdownHook(new
Thread(agentPluginLoader::shutdownAllServices));
}
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
index 622a24c..890a32d 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
@@ -28,7 +28,7 @@ import net.bytebuddy.implementation.SuperMethodCall;
import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.utility.JavaModule;
import org.apache.shardingsphere.agent.core.plugin.PluginAdviceDefinition;
-import org.apache.shardingsphere.agent.core.plugin.PluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
import
org.apache.shardingsphere.agent.core.plugin.advice.ConstructorMethodInterceptor;
import
org.apache.shardingsphere.agent.core.plugin.advice.MethodAroundInterceptor;
import
org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundInterceptor;
@@ -45,22 +45,22 @@ import java.util.Map;
@Slf4j
public class ShardingSphereTransformer implements AgentBuilder.Transformer {
- private final PluginLoader pluginLoader;
+ private final AgentPluginLoader agentPluginLoader;
- public ShardingSphereTransformer(final PluginLoader pluginLoader) {
- this.pluginLoader = pluginLoader;
+ public ShardingSphereTransformer(final AgentPluginLoader
agentPluginLoader) {
+ this.agentPluginLoader = agentPluginLoader;
}
@Override
public DynamicType.Builder<?> transform(final DynamicType.Builder<?>
builder, final TypeDescription typeDescription, final ClassLoader classLoader,
final JavaModule module) {
- if (pluginLoader.containsType(typeDescription)) {
+ if (agentPluginLoader.containsType(typeDescription)) {
DynamicType.Builder<?> newBuilder =
builder.defineField("_SSExtraData_", Map.class, Opcodes.ACC_PRIVATE |
Opcodes.ACC_VOLATILE)
.implement(TargetObject.class)
.intercept(FieldAccessor.ofField("_SSExtraData_"));
- final PluginAdviceDefinition define =
pluginLoader.loadPluginAdviceDefine(typeDescription);
+ final PluginAdviceDefinition define =
agentPluginLoader.loadPluginAdviceDefine(typeDescription);
for (ConstructorPoint point : define.getConstructorPoints()) {
try {
- final ConstructorMethodInterceptor interceptor = new
ConstructorMethodInterceptor(pluginLoader.getOrCreateInstance(point.getAdvice()));
+ final ConstructorMethodInterceptor interceptor = new
ConstructorMethodInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
newBuilder =
newBuilder.constructor(point.getConstructorMatcher())
.intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
// CHECKSTYLE:OFF
@@ -71,7 +71,7 @@ public class ShardingSphereTransformer implements
AgentBuilder.Transformer {
}
for (ClassStaticMethodPoint point :
define.getClassStaticMethodPoints()) {
try {
- final StaticMethodAroundInterceptor interceptor = new
StaticMethodAroundInterceptor(pluginLoader.getOrCreateInstance(point.getAdvice()));
+ final StaticMethodAroundInterceptor interceptor = new
StaticMethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
newBuilder =
newBuilder.method(point.getMethodsMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
// CHECKSTYLE:OFF
} catch (Exception e) {
@@ -81,7 +81,7 @@ public class ShardingSphereTransformer implements
AgentBuilder.Transformer {
}
for (InstanceMethodPoint point : define.getInstanceMethodPoints())
{
try {
- final MethodAroundInterceptor interceptor = new
MethodAroundInterceptor(pluginLoader.getOrCreateInstance(point.getAdvice()));
+ final MethodAroundInterceptor interceptor = new
MethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
newBuilder =
newBuilder.method(point.getMethodMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
// CHECKSTYLE:OFF
} catch (Exception e) {
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathLocator.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
similarity index 87%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathLocator.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
index 081d2e9..ea337d2 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathLocator.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
@@ -30,17 +30,21 @@ import
org.apache.shardingsphere.agent.core.exception.ShardingSphereAgentExcepti
* Agent path locator.
*/
@Slf4j
-public final class AgentPathLocator {
+public final class AgentPathBuilder {
@Getter
private static File agentPath;
+ @Getter
+ private static File pluginPath;
+
static {
- agentPath = locatorPath();
+ agentPath = buildAgentPath();
+ pluginPath = buildAgentPluginPath();
}
- private static File locatorPath() {
- String classResourcePath =
AgentPathLocator.class.getName().replaceAll("\\.", "/") + ".class";
+ private static File buildAgentPath() {
+ String classResourcePath =
AgentPathBuilder.class.getName().replaceAll("\\.", "/") + ".class";
URL resource =
ClassLoader.getSystemClassLoader().getResource(classResourcePath);
if (resource != null) {
String url = resource.toString();
@@ -72,4 +76,8 @@ public final class AgentPathLocator {
return null;
}
}
+
+ private static File buildAgentPluginPath() {
+ return new File(agentPath.getPath() + "/plugins");
+ }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
index 8b5091a..fcd8184 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
@@ -36,6 +36,8 @@ public class AgentConfiguration {
@Data
public static class MetricsConfiguration {
+ private String type = "prometheus";
+
private String host;
private int port = 9090;
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
index 94c9c7f..03f6366 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
@@ -22,7 +22,7 @@ import java.io.File;
import java.io.IOException;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.agent.core.common.AgentPathLocator;
+import org.apache.shardingsphere.agent.core.common.AgentPathBuilder;
import org.apache.shardingsphere.agent.core.yaml.YamlEngine;
/**
@@ -43,7 +43,7 @@ public final class AgentConfigurationLoader {
*/
public static AgentConfiguration load() throws IOException {
String specifiedConfigPath = System.getProperty(SPECIFIED_CONFIG_PATH);
- File configFile = null == specifiedConfigPath ? new
File(AgentPathLocator.getAgentPath(), DEFAULT_CONFIG_PATH) : new
File(specifiedConfigPath);
+ File configFile = null == specifiedConfigPath ? new
File(AgentPathBuilder.getAgentPath(), DEFAULT_CONFIG_PATH) : new
File(specifiedConfigPath);
return loadAgentConfiguration(configFile);
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java
similarity index 56%
copy from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
copy to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java
index 8b5091a..08dd483 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java
@@ -15,31 +15,20 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.config;
-
-import lombok.Data;
-
-import java.util.List;
+package org.apache.shardingsphere.agent.core.exception;
/**
- * Agent configuration.
+ * Agent service provider not found exception.
*/
-@Data
-public class AgentConfiguration {
+public final class AgentServiceProviderNotFoundException extends
RuntimeException {
- private String applicationName;
+ private static final long serialVersionUID = -3730257541332863235L;
- private MetricsConfiguration metrics;
-
- private List<String> activatedPlugins;
+ public AgentServiceProviderNotFoundException(final Class<?> clazz) {
+ super(String.format("No implementation class load from SPI `%s`.",
clazz.getName()));
+ }
- @Data
- public static class MetricsConfiguration {
-
- private String host;
-
- private int port = 9090;
-
- private boolean jvmInformationCollectorEnabled;
+ public AgentServiceProviderNotFoundException(final Class<?> clazz, final
String type) {
+ super(String.format("No implementation class load from SPI `%s` with
type `%s`.", clazz.getName(), type));
}
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
similarity index 94%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
index 1088c30..eeb35e5 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
@@ -29,7 +29,7 @@ import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.common.AgentPathLocator;
+import org.apache.shardingsphere.agent.core.common.AgentPathBuilder;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
@@ -48,12 +48,12 @@ import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
/**
- * Plugins loader.
+ * Agent plugin loader.
*/
@Slf4j
-public final class PluginLoader extends ClassLoader implements Closeable {
+public final class AgentPluginLoader extends ClassLoader implements Closeable {
- private static final PluginLoader INSTANCE = new PluginLoader();
+ private static final AgentPluginLoader INSTANCE = new AgentPluginLoader();
private final ConcurrentHashMap<String, Object> objectPool = new
ConcurrentHashMap<>();
@@ -65,7 +65,7 @@ public final class PluginLoader extends ClassLoader
implements Closeable {
private Map<String, PluginAdviceDefinition> pluginDefineMap;
- private PluginLoader() {
+ private AgentPluginLoader() {
try {
pluginDefineMap = loadAllPlugins();
} catch (IOException ioe) {
@@ -102,16 +102,16 @@ public final class PluginLoader extends ClassLoader
implements Closeable {
}
/**
- * To get plugin loader instance.
+ * To get agent plugin loader instance.
*
* @return plugin loader
*/
- public static PluginLoader getInstance() {
+ public static AgentPluginLoader getInstance() {
return INSTANCE;
}
private Map<String, PluginAdviceDefinition> loadAllPlugins() throws
IOException {
- File[] jarFiles = AgentPathLocator.getAgentPath().listFiles(file ->
file.getName().endsWith(".jar"));
+ File[] jarFiles = AgentPathBuilder.getPluginPath().listFiles(file ->
file.getName().endsWith(".jar"));
ImmutableMap.Builder<String, PluginAdviceDefinition> pluginDefineMap =
ImmutableMap.builder();
if (jarFiles == null) {
return pluginDefineMap.build();
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/AgentServiceLoader.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
similarity index 93%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/AgentServiceLoader.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
index c6fdd2d..0b45846 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/AgentServiceLoader.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
@@ -15,12 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.utils;
+package org.apache.shardingsphere.agent.core.spi;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
-import java.util.Optional;
import java.util.ServiceLoader;
import java.util.concurrent.ConcurrentHashMap;
@@ -68,8 +67,8 @@ public final class AgentServiceLoader<T> {
*
* @return service instances
*/
- public Optional<T> newServiceInstances() {
- return serviceMap.get(service).stream().findFirst();
+ public Collection<T> newServiceInstances() {
+ return serviceMap.get(service);
}
private void register(final Class<T> service) {
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/MetricsRegisterFactory.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentTypedSPI.java
similarity index 77%
copy from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsRegisterFactory.java
copy to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentTypedSPI.java
index f15f799..49e69ec 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsRegisterFactory.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentTypedSPI.java
@@ -15,17 +15,17 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.metrics.api;
+package org.apache.shardingsphere.agent.core.spi;
/**
- * Metrics register factory.
+ * Agent typed SPI.
*/
-public interface MetricsRegisterFactory {
+public interface AgentTypedSPI {
/**
- * New instance metrics register.
- *
- * @return the metrics register
+ * Get type.
+ *
+ * @return type
*/
- MetricsRegister newInstance();
+ String getType();
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentTypedSPIRegistry.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentTypedSPIRegistry.java
new file mode 100644
index 0000000..60d2d52
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentTypedSPIRegistry.java
@@ -0,0 +1,46 @@
+/*
+ * 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.core.spi;
+
+import java.util.Optional;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.agent.core.exception.AgentServiceProviderNotFoundException;
+
+/**
+ * Agent typed SPI registry.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AgentTypedSPIRegistry {
+
+ /**
+ * Get registered service.
+ *
+ * @param typedSPIClass typed SPI class
+ * @param type type
+ * @param <T> type
+ * @return registered service
+ */
+ public static <T extends AgentTypedSPI> T getRegisteredService(final
Class<T> typedSPIClass, final String type) {
+ Optional<T> serviceInstance =
AgentServiceLoader.getServiceLoader(typedSPIClass).newServiceInstances().stream().filter(each
-> each.getType().equalsIgnoreCase(type)).findFirst();
+ if (serviceInstance.isPresent()) {
+ return serviceInstance.get();
+ }
+ throw new AgentServiceProviderNotFoundException(typedSPIClass, type);
+ }
+}
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/pom.xml
b/shardingsphere-agent/shardingsphere-agent-plugins/pom.xml
index 77a769a..ae62913 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/pom.xml
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/pom.xml
@@ -72,6 +72,12 @@
<exclude>org.apache.commons:logging:*</exclude>
</excludes>
</artifactSet>
+ <relocations>
+ <relocation>
+ <pattern>net.bytebuddy</pattern>
+
<shadedPattern>${shade.package}.net.bytebuddy</shadedPattern>
+ </relocation>
+ </relocations>
</configuration>
</execution>
</executions>
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/MetricsProvider.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
index 3132fa1..aeab546 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
@@ -17,11 +17,12 @@
package org.apache.shardingsphere.agent.metrics.api;
-import org.apache.shardingsphere.agent.core.utils.AgentServiceLoader;
-import
org.apache.shardingsphere.agent.metrics.api.prometheus.PrometheusMetricsRegisterFactory;
+import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
+import org.apache.shardingsphere.agent.core.spi.AgentTypedSPIRegistry;
+import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
/**
- * The enum Metrics provider.
+ * The enum metrics provider.
*/
public enum MetricsProvider {
@@ -33,7 +34,8 @@ public enum MetricsProvider {
private static MetricsRegisterFactory metricRegisterFactory;
static {
- metricRegisterFactory =
AgentServiceLoader.getServiceLoader(MetricsRegisterFactory.class).newServiceInstances().orElse(new
PrometheusMetricsRegisterFactory());
+ AgentConfiguration.MetricsConfiguration metricsConfiguration =
SingletonHolder.INSTANCE.get(AgentConfiguration.class).getMetrics();
+ metricRegisterFactory =
AgentTypedSPIRegistry.getRegisteredService(MetricsRegisterFactory.class,
metricsConfiguration.getType());
}
/**
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/MetricsRegisterFactory.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsRegisterFactory.java
index f15f799..07aa45b 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsRegisterFactory.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsRegisterFactory.java
@@ -17,10 +17,12 @@
package org.apache.shardingsphere.agent.metrics.api;
+import org.apache.shardingsphere.agent.core.spi.AgentTypedSPI;
+
/**
* Metrics register factory.
*/
-public interface MetricsRegisterFactory {
+public interface MetricsRegisterFactory extends AgentTypedSPI {
/**
* New instance metrics register.
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/prometheus/PrometheusMetricsRegister.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
index e03209f..223ce2a 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
@@ -46,9 +46,12 @@ public final class PrometheusMetricsRegister implements
MetricsRegister {
private final AgentConfiguration.MetricsConfiguration metricsConfiguration
= SingletonHolder.INSTANCE.get(AgentConfiguration.class).getMetrics();
+ private HTTPServer httpServer;
+
private PrometheusMetricsRegister() {
registerJvm();
startServer();
+ registerClose();
}
/**
@@ -153,7 +156,7 @@ public final class PrometheusMetricsRegister implements
MetricsRegister {
inetSocketAddress = new InetSocketAddress(host, port);
}
try {
- new HTTPServer(inetSocketAddress,
CollectorRegistry.defaultRegistry, true);
+ httpServer = new HTTPServer(inetSocketAddress,
CollectorRegistry.defaultRegistry, true);
log.info(String.format("you start prometheus metrics http server
host is: %s , port is: %s", inetSocketAddress.getPort(),
inetSocketAddress.getPort()));
} catch (IOException e) {
log.error("you start prometheus metrics http server is error", e);
@@ -168,8 +171,16 @@ public final class PrometheusMetricsRegister implements
MetricsRegister {
}
}
- private static class PrometheusMetricsRegisterHolder {
+ private void registerClose() {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (null != httpServer) {
+ httpServer.stop();
+ }
+ }));
+ }
+ private static class PrometheusMetricsRegisterHolder {
+
private static final PrometheusMetricsRegister INSTANCE = new
PrometheusMetricsRegister();
}
}
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/prometheus/PrometheusMetricsRegisterFactory.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegisterFactory.java
index 5ce8db4..a3145c8 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegisterFactory.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegisterFactory.java
@@ -29,4 +29,9 @@ public final class PrometheusMetricsRegisterFactory
implements MetricsRegisterFa
public MetricsRegister newInstance() {
return PrometheusMetricsRegister.getInstance();
}
+
+ @Override
+ public String getType() {
+ return "prometheus";
+ }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracers/shardingsphere-agent-tracer-sample/src/main/java/org/apache/shardingsphere/agent/plugin/trace/SamplePluginDefinition.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracers/shardingsphere-agent-tracer-sample/src/main/java/org/apache/shardingsphere/agent/plugin/trace/SamplePluginDefinition.java
index 0695381..6166284 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracers/shardingsphere-agent-tracer-sample/src/main/java/org/apache/shardingsphere/agent/plugin/trace/SamplePluginDefinition.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracers/shardingsphere-agent-tracer-sample/src/main/java/org/apache/shardingsphere/agent/plugin/trace/SamplePluginDefinition.java
@@ -27,15 +27,14 @@ import
org.apache.shardingsphere.agent.core.plugin.PluginDefinition;
public class SamplePluginDefinition extends PluginDefinition {
public SamplePluginDefinition() {
- super("");
+ super("sample");
}
@Override
protected void define() {
-
intercept("org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask")
+ intercept("org.Test")
.aroundInstanceMethod(ElementMatchers.named("run"))
.implement("org.apache.shardingsphere.agent.plugin.trace.SampleAdvice")
.build();
- registerService(SampleTracer.class);
}
}