mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
support disabledCommands part 2. #1729
This commit is contained in:
@@ -151,6 +151,9 @@ USERNAME=
|
||||
# password
|
||||
PASSWORD=
|
||||
|
||||
# disabledCommands
|
||||
DISABLED_COMMANDS=
|
||||
|
||||
############ Command Arguments ############
|
||||
|
||||
# if arguments contains -c/--command or -f/--batch-file, BATCH_MODE will be true
|
||||
@@ -405,6 +408,7 @@ Usage:
|
||||
[--tunnel-server <value>] [--agent-id <value>] [--stat-url <value>]
|
||||
[--app-name <value>]
|
||||
[--username <value>] [--password <value>]
|
||||
[--disabled-commands <value>]
|
||||
[--use-version <value>] [--repo-mirror <value>] [--versions] [--use-http]
|
||||
[--attach-only] [-c <value>] [-f <value>] [-v] [pid]
|
||||
|
||||
@@ -427,6 +431,7 @@ Options and Arguments:
|
||||
--app-name Special app name
|
||||
--username Special username
|
||||
--password Special password
|
||||
--disabled-commands Disable special commands
|
||||
--select select target process by classname or JARfilename
|
||||
-c,--command <value> Command to execute, multiple commands separated
|
||||
by ;
|
||||
@@ -449,6 +454,7 @@ EXAMPLES:
|
||||
./as.sh --use-version 3.5.1
|
||||
./as.sh --session-timeout 3600
|
||||
./as.sh --attach-only
|
||||
./as.sh --disabled-commands stop,dump
|
||||
./as.sh --select math-game
|
||||
./as.sh --repo-mirror aliyun --use-http
|
||||
WIKI:
|
||||
@@ -625,6 +631,11 @@ parse_arguments()
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--disabled-commands)
|
||||
DISABLED_COMMANDS="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--use-http)
|
||||
USE_HTTP=true
|
||||
shift # past argument
|
||||
@@ -834,6 +845,11 @@ attach_jvm()
|
||||
tempArgs+=("${PASSWORD}")
|
||||
fi
|
||||
|
||||
if [ "${DISABLED_COMMANDS}" ]; then
|
||||
tempArgs+=("-disabled-commands")
|
||||
tempArgs+=("${DISABLED_COMMANDS}")
|
||||
fi
|
||||
|
||||
if [ "${TARGET_IP}" ]; then
|
||||
tempArgs+=("-target-ip")
|
||||
tempArgs+=("${TARGET_IP}")
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.taobao.arthas.core.command.basic1000.HelpCommand;
|
||||
import com.taobao.arthas.core.command.basic1000.HistoryCommand;
|
||||
import com.taobao.arthas.core.command.basic1000.KeymapCommand;
|
||||
import com.taobao.arthas.core.command.basic1000.OptionsCommand;
|
||||
import com.alibaba.bytekit.utils.AnnotationUtils;
|
||||
import com.taobao.arthas.core.command.basic1000.AuthCommand;
|
||||
import com.taobao.arthas.core.command.basic1000.PwdCommand;
|
||||
import com.taobao.arthas.core.command.basic1000.ResetCommand;
|
||||
@@ -46,8 +47,10 @@ import com.taobao.arthas.core.command.monitor200.TimeTunnelCommand;
|
||||
import com.taobao.arthas.core.command.monitor200.TraceCommand;
|
||||
import com.taobao.arthas.core.command.monitor200.VmToolCommand;
|
||||
import com.taobao.arthas.core.command.monitor200.WatchCommand;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.Command;
|
||||
import com.taobao.arthas.core.shell.command.CommandResolver;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -58,10 +61,10 @@ import java.util.List;
|
||||
*/
|
||||
public class BuiltinCommandPack implements CommandResolver {
|
||||
|
||||
private static List<Command> commands = new ArrayList<Command>();
|
||||
private List<Command> commands = new ArrayList<Command>();
|
||||
|
||||
static {
|
||||
initCommands();
|
||||
public BuiltinCommandPack(List<String> disabledCommands) {
|
||||
initCommands(disabledCommands);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -69,53 +72,64 @@ public class BuiltinCommandPack implements CommandResolver {
|
||||
return commands;
|
||||
}
|
||||
|
||||
private static void initCommands() {
|
||||
commands.add(Command.create(HelpCommand.class));
|
||||
commands.add(Command.create(AuthCommand.class));
|
||||
commands.add(Command.create(KeymapCommand.class));
|
||||
commands.add(Command.create(SearchClassCommand.class));
|
||||
commands.add(Command.create(SearchMethodCommand.class));
|
||||
commands.add(Command.create(ClassLoaderCommand.class));
|
||||
commands.add(Command.create(JadCommand.class));
|
||||
commands.add(Command.create(GetStaticCommand.class));
|
||||
commands.add(Command.create(MonitorCommand.class));
|
||||
commands.add(Command.create(StackCommand.class));
|
||||
commands.add(Command.create(ThreadCommand.class));
|
||||
commands.add(Command.create(TraceCommand.class));
|
||||
commands.add(Command.create(WatchCommand.class));
|
||||
commands.add(Command.create(TimeTunnelCommand.class));
|
||||
commands.add(Command.create(JvmCommand.class));
|
||||
commands.add(Command.create(PerfCounterCommand.class));
|
||||
// commands.add(Command.create(GroovyScriptCommand.class));
|
||||
commands.add(Command.create(OgnlCommand.class));
|
||||
commands.add(Command.create(MemoryCompilerCommand.class));
|
||||
commands.add(Command.create(RedefineCommand.class));
|
||||
commands.add(Command.create(RetransformCommand.class));
|
||||
commands.add(Command.create(DashboardCommand.class));
|
||||
commands.add(Command.create(DumpClassCommand.class));
|
||||
commands.add(Command.create(HeapDumpCommand.class));
|
||||
commands.add(Command.create(JulyCommand.class));
|
||||
commands.add(Command.create(ThanksCommand.class));
|
||||
commands.add(Command.create(OptionsCommand.class));
|
||||
commands.add(Command.create(ClsCommand.class));
|
||||
commands.add(Command.create(ResetCommand.class));
|
||||
commands.add(Command.create(VersionCommand.class));
|
||||
commands.add(Command.create(SessionCommand.class));
|
||||
commands.add(Command.create(SystemPropertyCommand.class));
|
||||
commands.add(Command.create(SystemEnvCommand.class));
|
||||
commands.add(Command.create(VMOptionCommand.class));
|
||||
commands.add(Command.create(LoggerCommand.class));
|
||||
commands.add(Command.create(HistoryCommand.class));
|
||||
commands.add(Command.create(CatCommand.class));
|
||||
commands.add(Command.create(Base64Command.class));
|
||||
commands.add(Command.create(EchoCommand.class));
|
||||
commands.add(Command.create(PwdCommand.class));
|
||||
commands.add(Command.create(MBeanCommand.class));
|
||||
commands.add(Command.create(GrepCommand.class));
|
||||
commands.add(Command.create(TeeCommand.class));
|
||||
commands.add(Command.create(ProfilerCommand.class));
|
||||
commands.add(Command.create(VmToolCommand.class));
|
||||
commands.add(Command.create(ShutdownCommand.class));
|
||||
commands.add(Command.create(StopCommand.class));
|
||||
private void initCommands(List<String> disabledCommands) {
|
||||
List<Class<? extends AnnotatedCommand>> commandClassList = new ArrayList<Class<? extends AnnotatedCommand>>(32);
|
||||
commandClassList.add(HelpCommand.class);
|
||||
commandClassList.add(AuthCommand.class);
|
||||
commandClassList.add(KeymapCommand.class);
|
||||
commandClassList.add(SearchClassCommand.class);
|
||||
commandClassList.add(SearchMethodCommand.class);
|
||||
commandClassList.add(ClassLoaderCommand.class);
|
||||
commandClassList.add(JadCommand.class);
|
||||
commandClassList.add(GetStaticCommand.class);
|
||||
commandClassList.add(MonitorCommand.class);
|
||||
commandClassList.add(StackCommand.class);
|
||||
commandClassList.add(ThreadCommand.class);
|
||||
commandClassList.add(TraceCommand.class);
|
||||
commandClassList.add(WatchCommand.class);
|
||||
commandClassList.add(TimeTunnelCommand.class);
|
||||
commandClassList.add(JvmCommand.class);
|
||||
commandClassList.add(PerfCounterCommand.class);
|
||||
// commandClassList.add(GroovyScriptCommand.class);
|
||||
commandClassList.add(OgnlCommand.class);
|
||||
commandClassList.add(MemoryCompilerCommand.class);
|
||||
commandClassList.add(RedefineCommand.class);
|
||||
commandClassList.add(RetransformCommand.class);
|
||||
commandClassList.add(DashboardCommand.class);
|
||||
commandClassList.add(DumpClassCommand.class);
|
||||
commandClassList.add(HeapDumpCommand.class);
|
||||
commandClassList.add(JulyCommand.class);
|
||||
commandClassList.add(ThanksCommand.class);
|
||||
commandClassList.add(OptionsCommand.class);
|
||||
commandClassList.add(ClsCommand.class);
|
||||
commandClassList.add(ResetCommand.class);
|
||||
commandClassList.add(VersionCommand.class);
|
||||
commandClassList.add(SessionCommand.class);
|
||||
commandClassList.add(SystemPropertyCommand.class);
|
||||
commandClassList.add(SystemEnvCommand.class);
|
||||
commandClassList.add(VMOptionCommand.class);
|
||||
commandClassList.add(LoggerCommand.class);
|
||||
commandClassList.add(HistoryCommand.class);
|
||||
commandClassList.add(CatCommand.class);
|
||||
commandClassList.add(Base64Command.class);
|
||||
commandClassList.add(EchoCommand.class);
|
||||
commandClassList.add(PwdCommand.class);
|
||||
commandClassList.add(MBeanCommand.class);
|
||||
commandClassList.add(GrepCommand.class);
|
||||
commandClassList.add(TeeCommand.class);
|
||||
commandClassList.add(ProfilerCommand.class);
|
||||
commandClassList.add(VmToolCommand.class);
|
||||
commandClassList.add(ShutdownCommand.class);
|
||||
commandClassList.add(StopCommand.class);
|
||||
|
||||
for (Class<? extends AnnotatedCommand> clazz : commandClassList) {
|
||||
Name name = clazz.getAnnotation(Name.class);
|
||||
if (name != null && name.value() != null) {
|
||||
if (disabledCommands.contains(name.value())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
commands.add(Command.create(clazz));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ import com.taobao.arthas.core.util.ArthasBanner;
|
||||
import com.taobao.arthas.core.util.FileUtils;
|
||||
import com.taobao.arthas.core.util.InstrumentationUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.arthas.core.util.UserStatUtil;
|
||||
import com.taobao.arthas.core.util.affect.EnhancerAffect;
|
||||
import com.taobao.arthas.core.util.matcher.WildcardMatcher;
|
||||
@@ -393,7 +394,17 @@ public class ArthasBootstrap {
|
||||
this.securityAuthenticator = new SecurityAuthenticatorImpl(configure.getUsername(), configure.getPassword());
|
||||
|
||||
shellServer = new ShellServerImpl(options);
|
||||
BuiltinCommandPack builtinCommands = new BuiltinCommandPack();
|
||||
|
||||
List<String> disabledCommands = new ArrayList<String>();
|
||||
if (configure.getDisabledCommands() != null) {
|
||||
String[] strings = StringUtils.tokenizeToStringArray(configure.getDisabledCommands(), ",");
|
||||
if (strings != null) {
|
||||
for (String s : strings) {
|
||||
disabledCommands.add(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
BuiltinCommandPack builtinCommands = new BuiltinCommandPack(disabledCommands);
|
||||
List<CommandResolver> resolvers = new ArrayList<CommandResolver>();
|
||||
resolvers.add(builtinCommands);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user