From 85aa4f27b45c05578748319a1032d3c11fa1d9e2 Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Mon, 9 Nov 2020 16:39:25 +0800 Subject: [PATCH] session command print tunnel client connect status. #1576 --- .../arthas/core/command/basic1000/SessionCommand.java | 1 + .../taobao/arthas/core/command/model/SessionModel.java | 10 ++++++++++ .../taobao/arthas/core/command/view/SessionView.java | 1 + .../com/alibaba/arthas/tunnel/client/TunnelClient.java | 10 ++++++++++ .../tunnel/client/TunnelClientSocketClientHandler.java | 2 ++ 5 files changed, 24 insertions(+) diff --git a/core/src/main/java/com/taobao/arthas/core/command/basic1000/SessionCommand.java b/core/src/main/java/com/taobao/arthas/core/command/basic1000/SessionCommand.java index e532d6c9b..44a773a8f 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/basic1000/SessionCommand.java +++ b/core/src/main/java/com/taobao/arthas/core/command/basic1000/SessionCommand.java @@ -35,6 +35,7 @@ public class SessionCommand extends AnnotatedCommand { result.setAgentId(id); } result.setTunnelServer(tunnelClient.getTunnelServerUrl()); + result.setTunnelConnected(tunnelClient.isConnected()); } //statUrl diff --git a/core/src/main/java/com/taobao/arthas/core/command/model/SessionModel.java b/core/src/main/java/com/taobao/arthas/core/command/model/SessionModel.java index 0652f991c..aede0262a 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/model/SessionModel.java +++ b/core/src/main/java/com/taobao/arthas/core/command/model/SessionModel.java @@ -13,6 +13,8 @@ public class SessionModel extends ResultModel { private String tunnelServer; private String statUrl; + private boolean tunnelConnected; + @Override public String getType() { return "session"; @@ -57,4 +59,12 @@ public class SessionModel extends ResultModel { public void setStatUrl(String statUrl) { this.statUrl = statUrl; } + + public boolean isTunnelConnected() { + return tunnelConnected; + } + + public void setTunnelConnected(boolean tunnelConnected) { + this.tunnelConnected = tunnelConnected; + } } diff --git a/core/src/main/java/com/taobao/arthas/core/command/view/SessionView.java b/core/src/main/java/com/taobao/arthas/core/command/view/SessionView.java index 9f55fceb5..c496df9d7 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/view/SessionView.java +++ b/core/src/main/java/com/taobao/arthas/core/command/view/SessionView.java @@ -26,6 +26,7 @@ public class SessionView extends ResultView { } if (result.getTunnelServer() != null) { table.row("TUNNEL_SERVER", "" + result.getTunnelServer()); + table.row("TUNNEL_CONNECTED", "" + result.isTunnelConnected()); } if (result.getStatUrl() != null) { table.row("STAT_URL", result.getStatUrl()); 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 7477bd7ad..fc9aa6eb5 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 @@ -61,6 +61,8 @@ public class TunnelClient { */ private String version = "unknown"; + private volatile boolean connected = false; + public ChannelFuture start() throws IOException, InterruptedException, URISyntaxException { return connect(false); } @@ -190,4 +192,12 @@ public class TunnelClient { public void setAppName(String appName) { this.appName = appName; } + + public boolean isConnected() { + return connected; + } + + public void setConnected(boolean connected) { + this.connected = connected; + } } diff --git a/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClientSocketClientHandler.java b/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClientSocketClientHandler.java index f9595ed89..fdf04dea5 100644 --- a/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClientSocketClientHandler.java +++ b/tunnel-client/src/main/java/com/alibaba/arthas/tunnel/client/TunnelClientSocketClientHandler.java @@ -72,6 +72,7 @@ public class TunnelClientSocketClientHandler extends SimpleChannelInboundHandler if (idList != null && !idList.isEmpty()) { this.tunnelClient.setId(idList.get(0)); } + tunnelClient.setConnected(true); registerPromise.setSuccess(); } @@ -137,6 +138,7 @@ public class TunnelClientSocketClientHandler extends SimpleChannelInboundHandler @Override public void channelUnregistered(final ChannelHandlerContext ctx) throws Exception { + tunnelClient.setConnected(false); ctx.channel().eventLoop().schedule(new Runnable() { @Override public void run() {