mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
vmtool command support http api. #2141
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user