package com.leansoft.luxun.console;
import java.io.IOException;
import java.util.Arrays;
import org.apache.thrift.TException;
import com.leansoft.luxun.api.generated.DeleteTopicRequest;
import com.leansoft.luxun.api.generated.DeleteTopicResponse;
import com.leansoft.luxun.api.generated.Result;
import com.leansoft.luxun.api.generated.ResultCode;
import com.leansoft.luxun.client.AbstractClient;
import com.leansoft.luxun.common.exception.ErrorMapper;
import joptsimple.ArgumentAcceptingOptionSpec;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import static java.lang.String.format;
public class AdminConsole extends AbstractClient {
public AdminConsole(String host, int port) {
super(host, port);
}
/**
* delete topic no longer used
*
* @param topic topic name
* @param password authentication password
* @return number of partitions deleted
* @throws TException if any thrift error occurs
*/
public boolean deleteTopic(String topic, String password) throws TException {
synchronized (lock) {
getOrMakeConnection();
DeleteTopicRequest deleteTopicRequest = new DeleteTopicRequest();
deleteTopicRequest.setTopic(topic);
deleteTopicRequest.setPassword(password);
DeleteTopicResponse deleteTopicResponse = this.luxunClient.deleteTopic(deleteTopicRequest);
Result result = deleteTopicResponse.getResult();
if (result.getResultCode() == ResultCode.SUCCESS) {
return true;
} else {
RuntimeException runtimeException = ErrorMapper.toException(result.getErrorCode(), result.getErrorMessage());
throw runtimeException;
}
}
}
public static void main(String[] args) throws Exception {
OptionParser parser = new OptionParser();
ArgumentAcceptingOptionSpec<String> hostOpt = parser.acceptsAll(Arrays.asList("h", "host"), "server address")//
.withRequiredArg().describedAs("host").ofType(String.class);
ArgumentAcceptingOptionSpec<Integer> portOpt = parser.acceptsAll(Arrays.asList("p", "port"), "server port")//
.withRequiredArg().describedAs("port").ofType(int.class);
ArgumentAcceptingOptionSpec<String> topicOpt = parser.acceptsAll(Arrays.asList("t", "topic"), "topic name")//
.withRequiredArg().describedAs("topic").ofType(String.class);
//
parser.acceptsAll(Arrays.asList("d", "delete"), "delete topic");
//
ArgumentAcceptingOptionSpec<String> passwordOpt = parser
.acceptsAll(Arrays.asList("password"), "luxun password")//
.withOptionalArg().describedAs("password").ofType(String.class);
//
OptionSet options = parser.parse(args);
boolean delete = options.has("d") || options.has("delete");
if (!delete) {
printHelp(parser, null);
}
checkRequiredArgs(parser, options, hostOpt, portOpt, topicOpt);
String topic = options.valueOf(topicOpt);
String host = options.valueOf(hostOpt);
int port = options.valueOf(portOpt);
AdminConsole admin = new AdminConsole(host, port);
try {
final String password = options.valueOf(passwordOpt);
boolean result = admin.deleteTopic(topic, password);
if (result) {
System.out.println(format("delete topic [%s]", topic));
} else {
System.out.println(format("fail to delete topic [%s]", topic));
}
} finally {
admin.close();
}
}
static void checkRequiredArgs(OptionParser parser, OptionSet options, OptionSpec<?>... optionSepcs)
throws IOException {
for (OptionSpec<?> arg : optionSepcs) {
if (!options.has(arg)) {
printHelp(parser, arg);
}
}
}
private static void printHelp(OptionParser parser, OptionSpec<?> arg) throws IOException {
System.err.println("Delete Topic");
System.err.println("Usage: -d -h <host> -p <port> -t <topic> --password <password>");
if (arg != null) {
System.err.println("Missing required argument " + arg);
}
// parser.formatHelpWith(new MyFormatter());
parser.printHelpOn(System.err);
System.exit(1);
}
}