vmtool command support http api. #2141

This commit is contained in:
hengyunabc
2022-04-24 20:48:07 +08:00
parent a4be43ded7
commit 4faefc44a0
4 changed files with 93 additions and 4 deletions
@@ -0,0 +1,58 @@
package com.taobao.arthas.core.command.model;
import java.util.Collection;
/**
*
* @author hengyunabc 2022-04-24
*
*/
public class VmToolModel extends ResultModel {
private Object value;
private int expand = 1;
private Collection<ClassLoaderVO> matchedClassLoaders;
private String classLoaderClass;
@Override
public String getType() {
return "vmtool";
}
public Object getValue() {
return value;
}
public VmToolModel setValue(Object value) {
this.value = value;
return this;
}
public int getExpand() {
return expand;
}
public VmToolModel setExpand(int expand) {
this.expand = expand;
return this;
}
public String getClassLoaderClass() {
return classLoaderClass;
}
public VmToolModel setClassLoaderClass(String classLoaderClass) {
this.classLoaderClass = classLoaderClass;
return this;
}
public Collection<ClassLoaderVO> getMatchedClassLoaders() {
return matchedClassLoaders;
}
public VmToolModel setMatchedClassLoaders(Collection<ClassLoaderVO> matchedClassLoaders) {
this.matchedClassLoaders = matchedClassLoaders;
return this;
}
}
@@ -21,6 +21,7 @@ import com.taobao.arthas.core.command.express.ExpressException;
import com.taobao.arthas.core.command.express.ExpressFactory;
import com.taobao.arthas.core.command.model.ClassLoaderVO;
import com.taobao.arthas.core.command.model.SearchClassModel;
import com.taobao.arthas.core.command.model.VmToolModel;
import com.taobao.arthas.core.shell.cli.Completion;
import com.taobao.arthas.core.shell.cli.CompletionUtils;
import com.taobao.arthas.core.shell.cli.OptionCompleteHandler;
@@ -179,9 +180,10 @@ public class VmToolCommand extends AnnotatedCommand {
} else if (matchedClassLoaders.size() > 1) {
Collection<ClassLoaderVO> classLoaderVOList = ClassUtils
.createClassLoaderVOList(matchedClassLoaders);
SearchClassModel searchclassModel = new SearchClassModel().setClassLoaderClass(classLoaderClass)
VmToolModel vmToolModel = new VmToolModel().setClassLoaderClass(classLoaderClass)
.setMatchedClassLoaders(classLoaderVOList);
process.appendResult(searchclassModel);
process.appendResult(vmToolModel);
process.end(-1,
"Found more than one classloader by class name, please specify classloader with '-c <classloader hash>'");
return;
@@ -216,8 +218,8 @@ public class VmToolCommand extends AnnotatedCommand {
}
}
process.write(new ObjectView(value, this.expand).draw());
process.write("\n");
VmToolModel vmToolModel = new VmToolModel().setValue(value).setExpand(expand);
process.appendResult(vmToolModel);
process.end();
}
} else if (VmToolAction.forceGc.equals(action)) {
@@ -78,6 +78,7 @@ public class ResultViewResolver {
registerView(TimeTunnelView.class);
registerView(TraceView.class);
registerView(WatchView.class);
registerView(VmToolView.class);
} catch (Throwable e) {
logger.error("register result view failed", e);
@@ -0,0 +1,28 @@
package com.taobao.arthas.core.command.view;
import com.taobao.arthas.core.command.model.VmToolModel;
import com.taobao.arthas.core.shell.command.CommandProcess;
import com.taobao.arthas.core.util.StringUtils;
import com.taobao.arthas.core.view.ObjectView;
/**
*
* @author hengyunabc 2022-04-24
*
*/
public class VmToolView extends ResultView<VmToolModel> {
@Override
public void draw(CommandProcess process, VmToolModel model) {
if (model.getMatchedClassLoaders() != null) {
process.write("Matched classloaders: \n");
ClassLoaderView.drawClassLoaders(process, model.getMatchedClassLoaders(), false);
process.write("\n");
return;
}
int expand = model.getExpand();
Object value = model.getValue();
String resultStr = StringUtils.objectToString(expand >= 0 ? new ObjectView(value, expand).draw() : value);
process.write(resultStr).write("\n");
}
}