Skip to content

Commit

Permalink
Merge pull request #6 from nacos-group/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
KomachiSion authored May 15, 2024
2 parents c32dce9 + 841a7d6 commit d2b632c
Show file tree
Hide file tree
Showing 25 changed files with 413 additions and 260 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.alibaba.nacos.ctl.bootstrap;

import com.alibaba.nacos.ctl.bootstrap.command.NacosBootstrapCommand;
import com.alibaba.nacos.ctl.command.NacosCommand;
import com.alibaba.nacos.ctl.command.NacosCtl;
import com.alibaba.nacos.ctl.command.spi.NacosCommandLoader;
import com.alibaba.nacos.ctl.core.LogicHandler;
import com.alibaba.nacos.ctl.core.exception.HandlerException;
import com.alibaba.nacos.ctl.intraction.input.InputGetter;
import com.alibaba.nacos.ctl.bootstrap.utils.StringUtils;
import jline.console.UserInterruptException;
import picocli.CommandLine;

/**
Expand All @@ -16,38 +20,52 @@ public class ClientMain {

public static void main(String[] args) throws HandlerException {

System.out.println("NacosCtl Loading...\n");
System.out.println("NacosCtl Loading...");
InputGetter.init();
System.out.println("NacosCtl Load finished.\n");

System.out.println("Loading Nacos client sdk...\n");
System.out.println("Loading Nacos client sdk...");
LogicHandler.init();
System.out.println("Loading Nacos client sdk finished.\n");

System.out.println("Loading Extension commands...");
NacosCommandLoader.getInstance().loadCommands();
System.out.println("Loading Extension commands finish\n");

new CommandLine(new NacosCtl()).execute(args);
new CommandLine(new NacosBootstrapCommand()).execute(args);

loopExecute(InputGetter.getInstance());
}

private static void loopExecute(InputGetter in) {

String[] args;
CommandLine commandLine = new CommandLine(new NacosCtl());
for (NacosCommand each : NacosCommandLoader.getInstance().getLoadedCommands()) {
commandLine.getCommandSpec().addSubcommand(each.getCommandName(), new CommandLine(each));
}

// 循环执行命令
while (true) {

String line = in.nextLine();
args = StringUtils.parseInput(line);
// 忽略无效输入
if (args.length < 1 || args[0].length() < 1) {
continue;
}
// 给Picocli执行命令
int ret = new CommandLine(new NacosCtl()).execute(args);
// 特殊的流程控制,通过返回值来判断,-1是退出,-2是清屏
if (ret == -1) {
break;
}
if (ret == -2) {
in.clear();

try {
String line = in.nextLine();
args = StringUtils.parseInput(line);
// 忽略无效输入
if (args.length < 1 || args[0].length() < 1) {
continue;
}
// 给Picocli执行命令

int ret = commandLine.execute(args);
// 特殊的流程控制,通过返回值来判断,-1是退出,-2是清屏
if (ret == -1) {
break;
}
if (ret == -2) {
in.clear();
}
} catch (UserInterruptException ignored) {
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.alibaba.nacos.ctl.bootstrap.command;

import com.alibaba.nacos.ctl.command.NacosClear;
import com.alibaba.nacos.ctl.command.NacosQuit;
import com.alibaba.nacos.ctl.core.LogicHandler;
import com.alibaba.nacos.ctl.core.config.ConfigLoader;
import com.alibaba.nacos.ctl.core.config.GlobalConfig;
import picocli.CommandLine;
import picocli.CommandLine.Command;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

import static com.alibaba.nacos.ctl.command.utils.HintUtils.APP_NAME;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.CLI_DESCRIPTION;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.COMMAND_LIST_HEADING;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.FOOTER;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.GREETING;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.MIXIN_STANDARD_HELP_OPTIONS;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.VERSION_NAME;

/**
* the main command, based on picocli
*
* @author lehr
*/
@Command(name = APP_NAME, mixinStandardHelpOptions = MIXIN_STANDARD_HELP_OPTIONS, version = VERSION_NAME, description = CLI_DESCRIPTION, commandListHeading = COMMAND_LIST_HEADING, footer = FOOTER, subcommands = {
CommandLine.HelpCommand.class, NacosQuit.class, NacosClear.class})
public class NacosBootstrapCommand implements Runnable {

@CommandLine.Option(names = {"-e",
"--endpoint"}, paramLabel = "<endpoint ip>", description = "The Nacos-Server host Ip.")
private String host;

@CommandLine.Option(names = {"-p", "--port"}, paramLabel = "<port>", description = "The port of Nacos-Server.")
private Integer port;

@CommandLine.Option(names = {"-u",
"--username"}, paramLabel = "<username>", description = "Nacos authentication username.")
private String username;

@CommandLine.Option(names = {"-pswd",
"--password"}, paramLabel = "<password>", description = "Nacos password username.")
private String password;

@CommandLine.Option(names = {"-ak", "--accessKey"}, paramLabel = "<accessKey>", description = "Nacos access key.")
private String accessKey;

@CommandLine.Option(names = {"-sk", "--secretKey"}, paramLabel = "<secretKey>", description = "Nacos secret key.")
private String secretKey;

@Override
public void run() {
System.out.println(GREETING);
Map<String, String> confs = new HashMap<>();
for (Field f : this.getClass().getDeclaredFields()) {
if (f.isAnnotationPresent(CommandLine.Option.class)) {
try {
Object o = f.get(this);
if (o != null) {
confs.put(f.getName(), o.toString());
}
} catch (Exception e) {
//todo
}
}
}
if (!confs.isEmpty()) {
ConfigLoader.preload(confs);
GlobalConfig.getInstance().refresh();
LogicHandler.refresh();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.alibaba.nacos.ctl.command;

import picocli.CommandLine;

/**
* Nacos command.
*
* @author xiweng.yy
*/
public abstract class NacosCommand implements Runnable {

@CommandLine.Spec
CommandLine.Model.CommandSpec spec;

/**
* Get command name.
*
* @return command name
*/
public abstract String getCommandName();

@Override
public void run() {
spec.commandLine().usage(System.err);
}
}
48 changes: 3 additions & 45 deletions command/src/main/java/com/alibaba/nacos/ctl/command/NacosCtl.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,13 @@
import com.alibaba.nacos.ctl.command.namespace.NacosNamespace;
import com.alibaba.nacos.ctl.command.service.NacosService;
import com.alibaba.nacos.ctl.command.switches.NacosSwitch;
import com.alibaba.nacos.ctl.core.config.ConfigLoader;
import picocli.CommandLine;
import picocli.CommandLine.Command;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

import static com.alibaba.nacos.ctl.command.utils.HintUtils.APP_NAME;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.CLI_DESCRIPTION;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.COMMAND_LIST_HEADING;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.FOOTER;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.GREETING;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.MIXIN_STANDARD_HELP_OPTIONS;
import static com.alibaba.nacos.ctl.command.utils.HintUtils.VERSION_NAME;

Expand All @@ -29,49 +23,13 @@
@Command(name = APP_NAME, mixinStandardHelpOptions = MIXIN_STANDARD_HELP_OPTIONS, version = VERSION_NAME, description = CLI_DESCRIPTION, commandListHeading = COMMAND_LIST_HEADING, footer = FOOTER, subcommands = {
CommandLine.HelpCommand.class, NacosQuit.class, NacosClear.class, NacosConfig.class, NacosNamespace.class,
NacosInstance.class, NacosSwitch.class, NacosService.class,
// NacosMetrics.class,
NacosUse.class,
// NacosWatch.class,
})
public class NacosCtl implements Runnable {

@CommandLine.Option(names = {"-e",
"--endpoint"}, paramLabel = "<endpoint ip>", description = "The Nacos-Server host Ip.")
private String host;

@CommandLine.Option(names = {"-p", "--port"}, paramLabel = "<port>", description = "The port of Nacos-Server.")
private Integer port;

@CommandLine.Option(names = {"-u",
"--username"}, paramLabel = "<username>", description = "Nacos authentication username.")
private String username;

@CommandLine.Option(names = {"-pswd",
"--password"}, paramLabel = "<password>", description = "Nacos password username.")
private String password;

@CommandLine.Option(names = {"-ak", "--accessKey"}, paramLabel = "<accessKey>", description = "Nacos access key.")
private String accessKey;

@CommandLine.Option(names = {"-sk", "--secretKey"}, paramLabel = "<secretKey>", description = "Nacos secret key.")
private String secretKey;
public class NacosCtl extends NacosCommand {

@Override
public void run() {
System.out.println(GREETING);
Map<String, String> confs = new HashMap<>();
for (Field f : this.getClass().getDeclaredFields()) {
if (f.isAnnotationPresent(CommandLine.Option.class)) {
try {
Object o = f.get(this);
if (o != null) {
confs.put(f.getName(), o.toString());
}
} catch (Exception e) {
//todo
}
}
}
ConfigLoader.preload(confs);
public String getCommandName() {
return APP_NAME;
}
}
Loading

0 comments on commit d2b632c

Please sign in to comment.