From ee98d500ca881a01641dc4b74999ef8df282498c Mon Sep 17 00:00:00 2001 From: jiangML <1060319118@qq.com> Date: Thu, 29 Dec 2022 10:58:02 +0800 Subject: [PATCH] Agent: Optimize PluginBootService startup (#23113) * Optimize plugin startup * add MetaDataContextsFactoryAdvice for metric * Adjust JDBCBackendTransactionManager to BackendTransactionManager * fix it error * add blank line * Optimize field names * optimize code * remove logback.xml from agent distribution * fix error of advisor config load * optimize code * format code --- .../agent/bootstrap/ShardingSphereAgent.java | 14 +--- .../ClassLoaderContext.java} | 33 ++++---- .../loader/AdvisorConfigurationLoader.java | 36 ++++---- .../spi/PluginBootServiceRegistry.java | 16 ---- .../transformer/AgentTransformer.java | 25 ++++-- .../builder/advise/AdviceFactory.java | 29 +++---- .../builder/advise/JDBCAdviceFactory.java | 82 ------------------- ...ardingsphere-agent-binary-distribution.xml | 9 -- .../src/main/resources/logback.xml | 33 -------- .../advice/MetaDataContextsFactoryAdvice.java | 26 ++++++ .../resources/prometheus/jdbc-advisors.yaml | 10 +++ .../resources/prometheus/proxy-advisors.yaml | 10 ++- 12 files changed, 118 insertions(+), 205 deletions(-) rename agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/{transformer/builder/advise/ProxyAdviceFactory.java => classloader/ClassLoaderContext.java} (51%) delete mode 100644 agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/JDBCAdviceFactory.java delete mode 100644 agent/distribution/src/main/resources/logback.xml create mode 100644 agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/metrics/core/advice/MetaDataContextsFactoryAdvice.java diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java index b66c594c74ec6..a7ad053a11d67 100644 --- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java +++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java @@ -23,17 +23,15 @@ import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.dynamic.scaffold.TypeValidation; import net.bytebuddy.matcher.ElementMatchers; -import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration; -import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration; -import org.apache.shardingsphere.agent.bootstrap.classloader.AgentClassLoader; import org.apache.shardingsphere.agent.bootstrap.config.loader.PluginConfigurationLoader; import org.apache.shardingsphere.agent.bootstrap.logging.LoggingListener; -import org.apache.shardingsphere.agent.bootstrap.plugin.PluginBootServiceManager; import org.apache.shardingsphere.agent.bootstrap.plugin.PluginJar; import org.apache.shardingsphere.agent.bootstrap.plugin.loader.AdvisorConfigurationLoader; import org.apache.shardingsphere.agent.bootstrap.plugin.loader.AgentPluginLoader; import org.apache.shardingsphere.agent.bootstrap.transformer.AgentJunction; import org.apache.shardingsphere.agent.bootstrap.transformer.AgentTransformer; +import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration; +import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration; import java.io.IOException; import java.lang.instrument.Instrumentation; @@ -59,9 +57,6 @@ public static void premain(final String args, final Instrumentation instrumentat Collection pluginJars = AgentPluginLoader.load(); Map advisorConfigs = AdvisorConfigurationLoader.load(pluginJars, pluginConfigs.keySet(), isEnhancedForProxy); setUpAgentBuilder(instrumentation, pluginConfigs, pluginJars, advisorConfigs, isEnhancedForProxy); - if (isEnhancedForProxy) { - setupPluginBootService(pluginConfigs, pluginJars); - } } private static boolean isEnhancedForProxy() { @@ -83,9 +78,4 @@ private static void setUpAgentBuilder(final Instrumentation instrumentation, fin .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION) .with(new LoggingListener()).installOn(instrumentation); } - - private static void setupPluginBootService(final Map pluginConfigs, final Collection pluginJars) { - PluginBootServiceManager.startAllServices(pluginConfigs, AgentClassLoader.getClassLoader(), true); - Runtime.getRuntime().addShutdownHook(new Thread(() -> PluginBootServiceManager.closeAllServices(pluginJars))); - } } diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/ProxyAdviceFactory.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/classloader/ClassLoaderContext.java similarity index 51% rename from agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/ProxyAdviceFactory.java rename to agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/classloader/ClassLoaderContext.java index 59223762d950c..12b18c806c2c8 100644 --- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/ProxyAdviceFactory.java +++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/classloader/ClassLoaderContext.java @@ -15,36 +15,35 @@ * limitations under the License. */ -package org.apache.shardingsphere.agent.bootstrap.transformer.builder.advise; +package org.apache.shardingsphere.agent.bootstrap.classloader; +import lombok.Getter; import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import org.apache.shardingsphere.agent.advice.AgentAdvice; -import org.apache.shardingsphere.agent.bootstrap.classloader.AgentClassLoader; +import org.apache.shardingsphere.agent.bootstrap.plugin.PluginJar; +import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** - * Proxy Advice factory. + * Class loader context. */ @RequiredArgsConstructor -public final class ProxyAdviceFactory { +@Getter +public final class ClassLoaderContext { - private static final Map CACHED_ADVICES = new ConcurrentHashMap<>(); + private static final Map AGENT_CLASS_LOADERS = new ConcurrentHashMap<>(); + + private final ClassLoader appClassLoader; + + private final Collection pluginJars; /** - * Get advice. + * Get agent class loader. * - * @param adviceClassName advice class name - * @return got advance + * @return agent class loader */ - public AgentAdvice getAdvice(final String adviceClassName) { - return CACHED_ADVICES.computeIfAbsent(adviceClassName, this::createAdviceForProxy); - } - - @SneakyThrows(ReflectiveOperationException.class) - private AgentAdvice createAdviceForProxy(final String adviceClassName) { - return (AgentAdvice) Class.forName(adviceClassName, true, AgentClassLoader.getClassLoader()).getDeclaredConstructor().newInstance(); + public AgentClassLoader getAgentClassLoader() { + return AGENT_CLASS_LOADERS.computeIfAbsent(appClassLoader, key -> new AgentClassLoader(key, pluginJars)); } } diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/plugin/loader/AdvisorConfigurationLoader.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/plugin/loader/AdvisorConfigurationLoader.java index abd2e1a4a3e2d..2f70121bc185a 100644 --- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/plugin/loader/AdvisorConfigurationLoader.java +++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/plugin/loader/AdvisorConfigurationLoader.java @@ -21,19 +21,17 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.apache.shardingsphere.agent.bootstrap.classloader.AgentClassLoader; +import org.apache.shardingsphere.agent.bootstrap.logging.LoggerFactory; +import org.apache.shardingsphere.agent.bootstrap.logging.LoggerFactory.Logger; import org.apache.shardingsphere.agent.bootstrap.plugin.PluginJar; import org.apache.shardingsphere.agent.bootstrap.plugin.yaml.loader.YamlAdvisorsConfigurationLoader; import org.apache.shardingsphere.agent.bootstrap.plugin.yaml.swapper.YamlAdvisorsConfigurationSwapper; -import org.apache.shardingsphere.agent.bootstrap.spi.PluginBootServiceRegistry; import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration; -import org.apache.shardingsphere.agent.spi.PluginBootService; import java.io.InputStream; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; /** * Advisor configuration loader. @@ -41,6 +39,8 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class AdvisorConfigurationLoader { + private static final Logger LOGGER = LoggerFactory.getLogger(AgentPluginLoader.class); + /** * Load advisor configurations. * @@ -52,22 +52,30 @@ public final class AdvisorConfigurationLoader { public static Map load(final Collection pluginJars, final Collection pluginTypes, final boolean isEnhancedForProxy) { Map result = new HashMap<>(); AgentClassLoader.init(pluginJars); - for (PluginBootService each : PluginBootServiceRegistry.newInstances(AgentClassLoader.getClassLoader())) { - if (pluginTypes.contains(each.getType())) { - Collection advisorConfigs = YamlAdvisorsConfigurationSwapper - .swapToObject(YamlAdvisorsConfigurationLoader.load(getAdvisorsResourceStream(each, isEnhancedForProxy)), each.getType()); - result.putAll(advisorConfigs.stream().collect(Collectors.toMap(AdvisorConfiguration::getTargetClassName, Function.identity()))); + for (String each : pluginTypes) { + InputStream advisorsResourceStream = getAdvisorsResourceStream(each, isEnhancedForProxy); + if (null == advisorsResourceStream) { + LOGGER.error("No configuration of advisor for type `{}`", each); + continue; } + Collection advisorConfigs = YamlAdvisorsConfigurationSwapper.swapToObject(YamlAdvisorsConfigurationLoader.load(advisorsResourceStream), each); + mergeAdvisorConfigurations(result, advisorConfigs); } return ImmutableMap.builder().putAll(result).build(); } - private static InputStream getAdvisorsResourceStream(final PluginBootService pluginBootService, final boolean isEnhancedForProxy) { - InputStream result = pluginBootService.getClass().getResourceAsStream(getAdvisorsResourceFile(pluginBootService, (isEnhancedForProxy ? "proxy" : "jdbc") + "-advisors.yaml")); - return null == result ? pluginBootService.getClass().getResourceAsStream(getAdvisorsResourceFile(pluginBootService, "advisors.yaml")) : result; + private static InputStream getAdvisorsResourceStream(final String type, final boolean isEnhancedForProxy) { + InputStream result = AgentClassLoader.getClassLoader().getResourceAsStream(getAdvisorsResourceFile(type, (isEnhancedForProxy ? "proxy" : "jdbc") + "-advisors.yaml")); + return null == result ? AgentClassLoader.getClassLoader().getResourceAsStream(getAdvisorsResourceFile(type, "advisors.yaml")) : result; + } + + private static String getAdvisorsResourceFile(final String type, final String fileName) { + return String.join("/", type.toLowerCase(), fileName); } - private static String getAdvisorsResourceFile(final PluginBootService pluginBootService, final String fileName) { - return String.join("/", "", pluginBootService.getType().toLowerCase(), fileName); + private static void mergeAdvisorConfigurations(final Map advisorConfigMap, final Collection advisorConfigs) { + for (AdvisorConfiguration each : advisorConfigs) { + advisorConfigMap.computeIfAbsent(each.getTargetClassName(), key -> new AdvisorConfiguration(each.getTargetClassName())).getAdvisors().addAll(each.getAdvisors()); + } } } diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/spi/PluginBootServiceRegistry.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/spi/PluginBootServiceRegistry.java index 90f7fb2f27463..46ab5508c8d09 100644 --- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/spi/PluginBootServiceRegistry.java +++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/spi/PluginBootServiceRegistry.java @@ -22,9 +22,7 @@ import org.apache.shardingsphere.agent.spi.PluginBootService; import java.util.Collection; -import java.util.LinkedList; import java.util.Optional; -import java.util.ServiceLoader; /** * Plugin boot service registry. @@ -50,18 +48,4 @@ public static Optional getRegisteredService(final String type public static Collection getAllRegisteredServices() { return AgentServiceLoader.getServiceLoader(PluginBootService.class).getServices(); } - - /** - * Create new instances. - * - * @param classLoader class loader - * @return created instances - */ - public static Collection newInstances(final ClassLoader classLoader) { - Collection result = new LinkedList<>(); - for (PluginBootService each : ServiceLoader.load(PluginBootService.class, classLoader)) { - result.add(each); - } - return result; - } } diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/AgentTransformer.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/AgentTransformer.java index 7eea7ec274990..f50a579e1a295 100644 --- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/AgentTransformer.java +++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/AgentTransformer.java @@ -25,14 +25,17 @@ import net.bytebuddy.jar.asm.Opcodes; import net.bytebuddy.utility.JavaModule; import org.apache.shardingsphere.agent.advice.TargetAdviceObject; +import org.apache.shardingsphere.agent.bootstrap.classloader.ClassLoaderContext; +import org.apache.shardingsphere.agent.bootstrap.plugin.PluginBootServiceManager; import org.apache.shardingsphere.agent.bootstrap.plugin.PluginJar; -import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration; -import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration; import org.apache.shardingsphere.agent.bootstrap.transformer.builder.MethodAdvisorBuilder; import org.apache.shardingsphere.agent.bootstrap.transformer.builder.advise.AdviceFactory; +import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration; +import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration; import java.util.Collection; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; /** * Agent transformer. @@ -42,6 +45,8 @@ public final class AgentTransformer implements Transformer { private static final String EXTRA_DATA = "_$EXTRA_DATA$_"; + private static final AtomicBoolean STARTED_FLAG = new AtomicBoolean(false); + private final Map pluginConfigs; private final Collection pluginJars; @@ -56,10 +61,16 @@ public Builder transform(final Builder builder, final TypeDescription type if (!advisorConfigs.containsKey(typeDescription.getTypeName())) { return builder; } - Builder result = builder.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE).implement(TargetAdviceObject.class).intercept(FieldAccessor.ofField(EXTRA_DATA)); - AdviceFactory adviceFactory = new AdviceFactory(classLoader, pluginConfigs, pluginJars, isEnhancedForProxy); - AdvisorConfiguration advisorConfig = advisorConfigs.get(typeDescription.getTypeName()); - result = new MethodAdvisorBuilder(adviceFactory, advisorConfig, typeDescription).build(result); - return result; + ClassLoaderContext classLoaderContext = new ClassLoaderContext(classLoader, pluginJars); + startAllServices(classLoaderContext.getAgentClassLoader()); + return new MethodAdvisorBuilder(new AdviceFactory(classLoaderContext), advisorConfigs.get(typeDescription.getTypeName()), typeDescription) + .build(builder.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE).implement(TargetAdviceObject.class).intercept(FieldAccessor.ofField(EXTRA_DATA))); + } + + private void startAllServices(final ClassLoader classLoader) { + if (STARTED_FLAG.compareAndSet(false, true)) { + PluginBootServiceManager.startAllServices(pluginConfigs, classLoader, isEnhancedForProxy); + Runtime.getRuntime().addShutdownHook(new Thread(() -> PluginBootServiceManager.closeAllServices(pluginJars))); + } } } diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/AdviceFactory.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/AdviceFactory.java index a0ece22914b5d..f5cdcbdc0cf65 100644 --- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/AdviceFactory.java +++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/AdviceFactory.java @@ -17,29 +17,23 @@ package org.apache.shardingsphere.agent.bootstrap.transformer.builder.advise; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import org.apache.shardingsphere.agent.advice.AgentAdvice; -import org.apache.shardingsphere.agent.bootstrap.plugin.PluginJar; -import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration; +import org.apache.shardingsphere.agent.bootstrap.classloader.ClassLoaderContext; -import java.util.Collection; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Advice factory. */ +@RequiredArgsConstructor public final class AdviceFactory { - private final ProxyAdviceFactory proxyAdviceFactory; + private static final Map CACHED_ADVICES = new ConcurrentHashMap<>(); - private final JDBCAdviceFactory jdbcAdviceFactory; - - private final boolean isEnhancedForProxy; - - public AdviceFactory(final ClassLoader classLoader, final Map pluginConfigs, final Collection pluginJars, final boolean isEnhancedForProxy) { - proxyAdviceFactory = new ProxyAdviceFactory(); - jdbcAdviceFactory = new JDBCAdviceFactory(classLoader, pluginConfigs, pluginJars); - this.isEnhancedForProxy = isEnhancedForProxy; - } + private final ClassLoaderContext classLoaderContext; /** * Get advice. @@ -48,6 +42,13 @@ public AdviceFactory(final ClassLoader classLoader, final Map createAdvice(adviceClassName)); + } + + @SneakyThrows(ReflectiveOperationException.class) + private AgentAdvice createAdvice(final String adviceClassName) { + return (AgentAdvice) Class.forName(adviceClassName, true, classLoaderContext.getAgentClassLoader()).getDeclaredConstructor().newInstance(); } } diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/JDBCAdviceFactory.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/JDBCAdviceFactory.java deleted file mode 100644 index bdc365f11ec58..0000000000000 --- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/transformer/builder/advise/JDBCAdviceFactory.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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.bootstrap.transformer.builder.advise; - -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import org.apache.shardingsphere.agent.bootstrap.classloader.AgentClassLoader; -import org.apache.shardingsphere.agent.bootstrap.plugin.PluginJar; -import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration; -import org.apache.shardingsphere.agent.bootstrap.plugin.PluginBootServiceManager; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * JDBC advice factory. - */ -@RequiredArgsConstructor -public final class JDBCAdviceFactory { - - private static final Map CACHED_ADVICES = new ConcurrentHashMap<>(); - - private static final Map PLUGIN_CLASS_LOADERS = new HashMap<>(); - - private static boolean isStarted; - - private final ClassLoader classLoader; - - private final Map pluginConfigs; - - private final Collection pluginJars; - - /** - * Get advice. - * - * @param adviceClassName advice class name - * @param type of advice - * @return got advance - */ - @SuppressWarnings("unchecked") - public T getAdvice(final String adviceClassName) { - String adviceInstanceCacheKey = String.format("%s_%s@%s", adviceClassName, classLoader.getClass().getName(), Integer.toHexString(classLoader.hashCode())); - return (T) CACHED_ADVICES.computeIfAbsent(adviceInstanceCacheKey, key -> createAdviceForJDBC(adviceClassName)); - } - - @SneakyThrows(ReflectiveOperationException.class) - private Object createAdviceForJDBC(final String adviceClassName) { - ClassLoader pluginClassLoader = PLUGIN_CLASS_LOADERS.computeIfAbsent(classLoader, key -> new AgentClassLoader(key, pluginJars)); - Object result = Class.forName(adviceClassName, true, pluginClassLoader).getDeclaredConstructor().newInstance(); - setupPluginBootService(pluginClassLoader); - return result; - } - - private void setupPluginBootService(final ClassLoader pluginClassLoader) { - if (isStarted) { - return; - } - try { - PluginBootServiceManager.startAllServices(pluginConfigs, pluginClassLoader, false); - Runtime.getRuntime().addShutdownHook(new Thread(() -> PluginBootServiceManager.closeAllServices(pluginJars))); - } finally { - isStarted = true; - } - } -} diff --git a/agent/distribution/src/main/assembly/shardingsphere-agent-binary-distribution.xml b/agent/distribution/src/main/assembly/shardingsphere-agent-binary-distribution.xml index 56a14de20e9ae..7d6031fc80125 100644 --- a/agent/distribution/src/main/assembly/shardingsphere-agent-binary-distribution.xml +++ b/agent/distribution/src/main/assembly/shardingsphere-agent-binary-distribution.xml @@ -31,15 +31,6 @@ conf 0644 - - src/main/resources - - logback.xml - - conf - 0644 - - ../../ diff --git a/agent/distribution/src/main/resources/logback.xml b/agent/distribution/src/main/resources/logback.xml deleted file mode 100644 index 1494746120c26..0000000000000 --- a/agent/distribution/src/main/resources/logback.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n - - - - - - - - - - - diff --git a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/metrics/core/advice/MetaDataContextsFactoryAdvice.java b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/metrics/core/advice/MetaDataContextsFactoryAdvice.java new file mode 100644 index 0000000000000..8fd9c8211a5e4 --- /dev/null +++ b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/metrics/core/advice/MetaDataContextsFactoryAdvice.java @@ -0,0 +1,26 @@ +/* + * 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.core.advice; + +import org.apache.shardingsphere.agent.advice.type.StaticMethodAdvice; + +/** + * Meta data contexts factory advice. + */ +public final class MetaDataContextsFactoryAdvice implements StaticMethodAdvice { +} diff --git a/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/jdbc-advisors.yaml b/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/jdbc-advisors.yaml index b1312a0905c3c..aa4272008f85b 100644 --- a/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/jdbc-advisors.yaml +++ b/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/jdbc-advisors.yaml @@ -14,3 +14,13 @@ # See the License for the specific language governing permissions and # limitations under the License. # + +advisors: + - target: org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory + advice: org.apache.shardingsphere.agent.metrics.core.advice.MetaDataContextsFactoryAdvice + pointcuts: + - name: create + type: method + params: + - index: 3 + type: java.util.Map diff --git a/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/proxy-advisors.yaml b/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/proxy-advisors.yaml index b72dea54591eb..9d651a363d66a 100644 --- a/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/proxy-advisors.yaml +++ b/agent/plugins/metrics/type/prometheus/src/main/resources/prometheus/proxy-advisors.yaml @@ -37,7 +37,7 @@ advisors: pointcuts: - name: route type: method - - target: org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.JDBCBackendTransactionManager + - target: org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.BackendTransactionManager advice: org.apache.shardingsphere.agent.metrics.core.advice.TransactionAdvice pointcuts: - name: commit @@ -49,3 +49,11 @@ advisors: pointcuts: - name: parse type: method + - target: org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory + advice: org.apache.shardingsphere.agent.metrics.core.advice.MetaDataContextsFactoryAdvice + pointcuts: + - name: create + type: method + params: + - index: 3 + type: java.util.Map