18
18
package cn .polarismesh .agent .core .asm .instrument .plugin ;
19
19
20
20
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 ;
21
23
import cn .polarismesh .agent .core .common .utils .StringUtils ;
24
+
25
+ import java .io .IOException ;
22
26
import java .util .Collections ;
23
27
import java .util .HashSet ;
24
28
import java .util .Set ;
29
+ import java .util .jar .JarFile ;
30
+ import java .util .jar .Manifest ;
25
31
26
32
public class PluginNameFilter implements PluginFilter {
27
33
34
+ private static final CommonLogger logger = StdoutCommonLoggerFactory .INSTANCE
35
+ .getLogger (PluginNameFilter .class .getCanonicalName ());
36
+
28
37
private final Set <String > pluginNames ;
29
38
30
39
public PluginNameFilter () {
@@ -38,6 +47,9 @@ public boolean accept(PluginJar pluginJar) {
38
47
39
48
private static Set <String > getLoadablePluginNames () {
40
49
String enablePlugins = ConfigManager .INSTANCE .getConfigValue (ConfigManager .KEY_PLUGIN_ENABLE );
50
+ logger .info ("Enable plugins: " + enablePlugins );
51
+ enablePlugins = appendSpringCloudPluginNameIfNeeded (enablePlugins );
52
+ logger .info ("Enable plugins after appendSpringCloudPluginNameIfNeeded: " + enablePlugins );
41
53
if (StringUtils .isEmpty (enablePlugins )) {
42
54
return Collections .emptySet ();
43
55
}
@@ -51,4 +63,63 @@ private static Set<String> getLoadablePluginNames() {
51
63
}
52
64
return values ;
53
65
}
66
+
67
+ private static String appendSpringCloudPluginNameIfNeeded (String enablePlugins ) {
68
+ if (StringUtils .hasText (enablePlugins )) {
69
+ String [] names = enablePlugins .split ("," );
70
+ for (String name : names ) {
71
+ if (StringUtils .hasText (name ) && name .contains ("spring-cloud-" )) {
72
+ return enablePlugins ;
73
+ }
74
+ }
75
+ }
76
+
77
+ JarFile jarFile = null ;
78
+ try {
79
+ String classPath = System .getProperty ("java.class.path" );
80
+ logger .info ("Class path: " + classPath );
81
+ String [] paths = classPath .split (":" );
82
+ String mainJarPath = paths [0 ];
83
+ logger .info ("Main jar: " + mainJarPath );
84
+ jarFile = new JarFile (mainJarPath );
85
+ Manifest manifest = (jarFile ).getManifest ();
86
+ String versionStr = manifest .getMainAttributes ().getValue ("Spring-Boot-Version" );
87
+ logger .info ("Spring Boot Version: " + versionStr );
88
+ String springCloudPluginNamePattern = "spring-cloud-%s-plugin" ;
89
+ String springCloudVersion = "" ;
90
+ if (versionStr .startsWith ("2.2" ) || versionStr .startsWith ("2.3" )) {
91
+ springCloudVersion = "hoxton" ;
92
+ } else if (versionStr .startsWith ("2.4" ) || versionStr .startsWith ("2.5" )) {
93
+ springCloudVersion = "2020" ;
94
+ } else if (versionStr .startsWith ("2.6" ) || versionStr .startsWith ("2.7" )) {
95
+ springCloudVersion = "2021" ;
96
+ } else if (versionStr .startsWith ("3.0" ) || versionStr .startsWith ("3.1" )) {
97
+ springCloudVersion = "2022" ;
98
+ } else if (versionStr .startsWith ("3.2" ) || versionStr .startsWith ("3.3" )) {
99
+ springCloudVersion = "2023" ;
100
+ }
101
+ if (StringUtils .hasText (springCloudVersion )) {
102
+ String springCloudPluginName = String .format (springCloudPluginNamePattern , springCloudVersion );
103
+ logger .info ("Spring Cloud Version: " + springCloudVersion );
104
+ if (StringUtils .hasText (enablePlugins )) {
105
+ enablePlugins = enablePlugins + "," + springCloudPluginName ;
106
+ } else {
107
+ enablePlugins = springCloudPluginName ;
108
+ }
109
+ } else {
110
+ logger .warn ("No compatible Spring Cloud version found for Spring Boot version: " + versionStr );
111
+ }
112
+ } catch (IOException ioException ) {
113
+ logger .warn ("Cannot get Spring Boot Version from MANIFEST." , ioException );
114
+ } finally {
115
+ if (jarFile != null ) {
116
+ try {
117
+ jarFile .close ();
118
+ } catch (IOException ioException ) {
119
+ logger .warn ("Cannot close jarFile" , ioException );
120
+ }
121
+ }
122
+ }
123
+ return enablePlugins ;
124
+ }
54
125
}
0 commit comments