Skip to content

Commit f6ebde8

Browse files
feat:support spring cloud version auto-detection. (#196)
1 parent f3c8196 commit f6ebde8

File tree

10 files changed

+636
-788
lines changed

10 files changed

+636
-788
lines changed

polaris-agent-build/bin/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ cp "polaris-agent-core/polaris-agent-core-optional-java17/target/polaris-agent-c
3939
cp "polaris-agent-core/polaris-agent-core-extension/target/polaris-agent-core-extension-${version}.jar" "${folder_name}/boot/"
4040

4141
pushd "polaris-agent-plugins"
42-
plugin_folders=$(find . -maxdepth 2 | grep -E ".+-plugin$")
42+
plugin_folders=$(find . -maxdepth 2 | grep -E ".+-plugin.+-")
4343
for plugin_folder in ${plugin_folders}; do
4444
file_name=${plugin_folder##*/}
4545
cp "${plugin_folder}/target/${file_name}-${version}.jar" "../${folder_name}/plugins/"

polaris-agent-build/bin/start.sh

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,20 @@ unzip ${polaris_agent_dir_name}.zip
2323
echo "inject with framework ${JAVA_AGENT_FRAMEWORK_NAME} and version ${JAVA_AGENT_FRAMEWORK_VERSION}"
2424

2525
# 第一步,需要确定 agent-plugin 启用哪个
26-
custom_plugin_id="${JAVA_AGENT_FRAMEWORK_NAME}-${JAVA_AGENT_FRAMEWORK_VERSION}-plugin"
26+
custom_plugin_id=""
27+
if [ -n ${JAVA_AGENT_FRAMEWORK_NAME} ] && [ -n ${JAVA_AGENT_FRAMEWORK_VERSION} ]; then
28+
custom_plugin_id="${JAVA_AGENT_FRAMEWORK_NAME}-${JAVA_AGENT_FRAMEWORK_VERSION}-plugin"
29+
fi
2730
echo "plugins.enable=${custom_plugin_id}" > ${polaris_agent_dir_name}/conf/polaris-agent.config
2831

2932
# 第二步,将 plugin 所需要的配置注入到 plugin 对应的目录中去
30-
java_agent_config_dir="${JAVA_AGENT_FRAMEWORK_NAME}-${JAVA_AGENT_FRAMEWORK_VERSION}"
31-
echo "inject with config dir ${java_agent_config_dir}"
3233
echo "inject with default config ${JAVA_AGENT_PLUGIN_CONF}"
33-
3434
custom_plugin_properties=${JAVA_AGENT_PLUGIN_CONF}
35-
echo "${custom_plugin_properties}" > ${polaris_agent_dir_name}/conf/plugin/${java_agent_config_dir}/application.properties
35+
target_config_file=${polaris_agent_dir_name}/conf/plugin/spring-cloud/application.properties
36+
echo "${custom_plugin_properties}" > "${target_config_file}"
3637

3738
# 第三步,将地域信息拉取并设置进配置文件
3839
# 腾讯云不能拿到大区,因此腾讯云上的region对应的是北极星的zone,zone对应北极星的campus
39-
target_config_file=${polaris_agent_dir_name}/conf/plugin/${java_agent_config_dir}/application.properties
40-
4140
echo "start to fetch region, target config file ${target_config_file}"
4241
region="$(curl -s --connect-timeout 10 -m 10 http://metadata.tencentyun.com/latest/meta-data/placement/region)"
4342
region_code=$?

polaris-agent-core/polaris-agent-core-asm/src/main/java/cn/polarismesh/agent/core/asm/instrument/plugin/PluginNameFilter.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,21 @@
1818
package cn.polarismesh.agent.core.asm.instrument.plugin;
1919

2020
import cn.polarismesh.agent.core.common.conf.ConfigManager;
21+
import cn.polarismesh.agent.core.common.logger.CommonLogger;
22+
import cn.polarismesh.agent.core.common.logger.StdoutCommonLoggerFactory;
23+
import cn.polarismesh.agent.core.common.utils.ReflectionUtils;
2124
import cn.polarismesh.agent.core.common.utils.StringUtils;
25+
26+
import java.lang.reflect.Method;
2227
import java.util.Collections;
2328
import java.util.HashSet;
2429
import java.util.Set;
2530

2631
public class PluginNameFilter implements PluginFilter {
2732

33+
private static final CommonLogger logger = StdoutCommonLoggerFactory.INSTANCE
34+
.getLogger(PluginNameFilter.class.getCanonicalName());
35+
2836
private final Set<String> pluginNames;
2937

3038
public PluginNameFilter() {
@@ -38,6 +46,7 @@ public boolean accept(PluginJar pluginJar) {
3846

3947
private static Set<String> getLoadablePluginNames() {
4048
String enablePlugins = ConfigManager.INSTANCE.getConfigValue(ConfigManager.KEY_PLUGIN_ENABLE);
49+
enablePlugins = appendSpringCloudPluginNameIfNeeded(enablePlugins);
4150
if (StringUtils.isEmpty(enablePlugins)) {
4251
return Collections.emptySet();
4352
}
@@ -51,4 +60,52 @@ private static Set<String> getLoadablePluginNames() {
5160
}
5261
return values;
5362
}
63+
64+
private static String appendSpringCloudPluginNameIfNeeded(String enablePlugins) {
65+
if (StringUtils.hasText(enablePlugins)) {
66+
String[] names = enablePlugins.split(",");
67+
for (String name : names) {
68+
if (StringUtils.hasText(name) && name.contains("spring-cloud-")) {
69+
return enablePlugins;
70+
}
71+
}
72+
}
73+
74+
// check if spring-cloud and spring-boot exist.
75+
if (ReflectionUtils.checkClassExists("org.springframework.cloud.configuration.SpringBootVersionVerifier")
76+
&& ReflectionUtils.checkClassExists("org.springframework.boot.SpringBootVersion")) {
77+
Method method = ReflectionUtils.findMethod(ReflectionUtils.findClass("org.springframework.boot.SpringBootVersion"), "getVersion");
78+
Object version = ReflectionUtils.invokeMethod(method, null);
79+
80+
if (version instanceof String) {
81+
String versionStr = (String) version;
82+
logger.info("Spring Boot Version: " + version);
83+
String springCloudPluginNamePattern = "spring-cloud-%s-plugin";
84+
String springCloudVersion = "";
85+
if (versionStr.startsWith("2.2") || versionStr.startsWith("2.3")) {
86+
springCloudVersion = "hoxton";
87+
} else if (versionStr.startsWith("2.4") || versionStr.startsWith("2.5")) {
88+
springCloudVersion = "2020";
89+
} else if (versionStr.startsWith("2.6") || versionStr.startsWith("2.7")) {
90+
springCloudVersion = "2021";
91+
} else if (versionStr.startsWith("3.0") || versionStr.startsWith("3.1")) {
92+
springCloudVersion = "2022";
93+
} else if (versionStr.startsWith("3.2") || versionStr.startsWith("3.3")) {
94+
springCloudVersion = "2023";
95+
}
96+
if (StringUtils.hasText(springCloudVersion)) {
97+
String springCloudPluginName = String.format(springCloudPluginNamePattern, springCloudVersion);
98+
logger.info("Spring Cloud Version: " + springCloudVersion);
99+
if (StringUtils.hasText(enablePlugins)) {
100+
enablePlugins = enablePlugins + "," + springCloudPluginName;
101+
} else {
102+
enablePlugins = springCloudPluginName;
103+
}
104+
}
105+
} else {
106+
logger.warn("Cannot get Spring Boot Version from MANIFEST.");
107+
}
108+
}
109+
return enablePlugins;
110+
}
54111
}

0 commit comments

Comments
 (0)