From e53f35597866225efb8dc967a26d60ee6e6e551a Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Mon, 26 Oct 2020 17:15:39 +0800 Subject: [PATCH] tunnel client report arthas version. #1556 --- .../arthas/core/advisor/TransformerManager.java | 6 ++++++ .../taobao/arthas/core/server/ArthasBootstrap.java | 1 + .../alibaba/arthas/tunnel/client/TunnelClient.java | 13 +++++++++++++ .../alibaba/arthas/tunnel/common/URIConstans.java | 2 ++ .../com/alibaba/arthas/tunnel/server/AgentInfo.java | 9 +++++++++ .../tunnel/server/TunnelSocketFrameHandler.java | 9 +++++++++ 6 files changed, 40 insertions(+) diff --git a/core/src/main/java/com/taobao/arthas/core/advisor/TransformerManager.java b/core/src/main/java/com/taobao/arthas/core/advisor/TransformerManager.java index 08b7fe15a..73bf2c15d 100644 --- a/core/src/main/java/com/taobao/arthas/core/advisor/TransformerManager.java +++ b/core/src/main/java/com/taobao/arthas/core/advisor/TransformerManager.java @@ -9,6 +9,12 @@ import java.util.concurrent.CopyOnWriteArrayList; /** * + *
+ * * 统一管理 ClassFileTransformer
+ * * 每个增强命令对应一个 Enhancer ,也统一在这里管理
+ * 
+ * + * @see com.taobao.arthas.core.advisor.Enhancer * @author hengyunabc 2020-05-18 * */ diff --git a/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java b/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java index cedbd9323..1b40c5763 100644 --- a/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java +++ b/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java @@ -301,6 +301,7 @@ public class ArthasBootstrap { tunnelClient = new TunnelClient(); tunnelClient.setId(configure.getAgentId()); tunnelClient.setTunnelServerUrl(configure.getTunnelServer()); + tunnelClient.setVersion(ArthasBanner.version()); ChannelFuture channelFuture = tunnelClient.start(); channelFuture.await(10, TimeUnit.SECONDS); if(channelFuture.isSuccess()) { diff --git a/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClient.java b/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClient.java index b5334357e..1146fd87f 100644 --- a/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClient.java +++ b/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClient.java @@ -55,6 +55,11 @@ public class TunnelClient { // agent id, generated by tunnel server. if reconnect, reuse the id volatile private String id; + /** + * arthas version + */ + private String version = "unknown"; + public ChannelFuture start() throws IOException, InterruptedException, URISyntaxException { return connect(false); } @@ -62,6 +67,7 @@ public class TunnelClient { public ChannelFuture connect(boolean reconnect) throws SSLException, URISyntaxException, InterruptedException { QueryStringEncoder queryEncoder = new QueryStringEncoder(this.tunnelServerUrl); queryEncoder.addParam(URIConstans.METHOD, MethodConstants.AGENT_REGISTER); + queryEncoder.addParam(URIConstans.ARTHAS_VERSION, this.version); if (id != null) { queryEncoder.addParam(URIConstans.ID, id); } @@ -165,4 +171,11 @@ public class TunnelClient { this.id = id; } + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } } diff --git a/tunnel-common/src/main/java/com/alibaba/arthas/tunnel/common/URIConstans.java b/tunnel-common/src/main/java/com/alibaba/arthas/tunnel/common/URIConstans.java index fd0c7f931..8cdcf768b 100644 --- a/tunnel-common/src/main/java/com/alibaba/arthas/tunnel/common/URIConstans.java +++ b/tunnel-common/src/main/java/com/alibaba/arthas/tunnel/common/URIConstans.java @@ -39,4 +39,6 @@ public class URIConstans { * proxy请求的返回值,base64编码 */ public static final String PROXY_RESPONSE_DATA = "responseData"; + + public static final String ARTHAS_VERSION = "arthasVersion"; } diff --git a/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/AgentInfo.java b/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/AgentInfo.java index fc11f282d..73459f084 100644 --- a/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/AgentInfo.java +++ b/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/AgentInfo.java @@ -15,6 +15,7 @@ public class AgentInfo { private ChannelHandlerContext channelHandlerContext; private String host; private int port; + private String arthasVersion; public ChannelHandlerContext getChannelHandlerContext() { return channelHandlerContext; @@ -40,4 +41,12 @@ public class AgentInfo { this.port = port; } + public String getArthasVersion() { + return arthasVersion; + } + + public void setArthasVersion(String arthasVersion) { + this.arthasVersion = arthasVersion; + } + } diff --git a/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/TunnelSocketFrameHandler.java b/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/TunnelSocketFrameHandler.java index 74a2a79a7..29d4be774 100644 --- a/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/TunnelSocketFrameHandler.java +++ b/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/TunnelSocketFrameHandler.java @@ -214,6 +214,12 @@ public class TunnelSocketFrameHandler extends SimpleChannelInboundHandler arthasVersionList = queryDecoder.parameters().get(URIConstans.ARTHAS_VERSION); + if (arthasVersionList != null && !arthasVersionList.isEmpty()) { + arthasVersion = arthasVersionList.get(0); + } + final String finalId = id; // URI responseUri = new URI("response", null, "/", "method=" + MethodConstants.AGENT_REGISTER + "&id=" + id, null); @@ -229,6 +235,9 @@ public class TunnelSocketFrameHandler extends SimpleChannelInboundHandler>() {