package com.neverwinterdp.scribengin.client.shell;
import com.beust.jcommander.Parameter;
import com.neverwinterdp.scribengin.ScribenginClient;
import com.neverwinterdp.scribengin.builder.ScribenginClusterBuilder;
import com.neverwinterdp.vm.VMDescriptor;
import com.neverwinterdp.vm.client.VMClient;
import com.neverwinterdp.vm.client.shell.Command;
import com.neverwinterdp.vm.client.shell.CommandInput;
import com.neverwinterdp.vm.client.shell.Shell;
import com.neverwinterdp.vm.client.shell.SubCommand;
import com.neverwinterdp.vm.tool.VMClusterBuilder;
public class ScribenginCommand extends Command {
public ScribenginCommand() {
add("start", Start.class);
add("shutdown", Shutdown.class);
add("info", Info.class);
add("master", Master.class);
}
static public class Start extends SubCommand {
@Override
public void execute(Shell shell, CommandInput cmdInput) throws Exception {
VMClient vmClient = shell.getVMClient();
ScribenginClusterBuilder clusterBuilder = new ScribenginClusterBuilder(new VMClusterBuilder(vmClient));
clusterBuilder.startScribenginMasters();
}
@Override
public String getDescription() {
return "start a scribenging cluster";
}
}
static public class Shutdown extends SubCommand {
@Override
public void execute(Shell shell, CommandInput cmdInput) throws Exception {
ScribenginClient client = ((ScribenginShell) shell).getScribenginClient();
client.shutdown();
}
@Override
public String getDescription() {
return "shutdown a scribengin cluster.";
}
}
static public class Info extends SubCommand {
@Override
public void execute(Shell shell, CommandInput cmdInput) throws Exception {
ScribenginClient client = ((ScribenginShell) shell).getScribenginClient();
shell.console().h1("Scribengin Info");
Formater.DataflowList runningDflFormater = new Formater.DataflowList(client.getRunningDataflowDescriptor());
shell.console().println(runningDflFormater.format("Running Dataflows"));
Formater.DataflowList historyDflFormater = new Formater.DataflowList(client.getHistoryDataflowDescriptor());
shell.console().println(historyDflFormater.format("History Dataflows"));
}
@Override
public String getDescription() {
return "get info about the scribengin cluster";
}
}
static public class Master extends SubCommand {
@Parameter(names = "--list", description = "List all running scribengin masters")
private boolean list;
@Parameter(names = "--shutdown", description = "Shutdown current master")
private boolean shutdown;
@Override
public void execute(Shell shell, CommandInput cmdInput) throws Exception {
ScribenginClient client = ((ScribenginShell) shell).getScribenginClient();
String leaderPath = client.getScribenginMaster().getStoredPath();
if (list) {
shell.console().h1("Listing Scribengin Masters");
Formater.VmList formatter = new Formater.VmList(client.getScribenginMasters(), leaderPath);
shell.console().println(formatter.format("Scribengin Masters"));
} else if (shutdown) {
// shell.console().h1("Shutting down current Scribengin Master");
VMClient vmClient = shell.getVMClient();
for (VMDescriptor desc : vmClient.getRunningVMDescriptors()) {
if (desc.getStoredPath().equals(leaderPath)) {
shell.console().h1("Shutting down leader " + desc.getId());
vmClient.shutdown(desc);
Thread.sleep(20000);
}
}
} else {
shell.console().println("Please provide either --shutdown or --list");
}
}
@Override
public String getDescription() {
return "commands for managing the Scribengin master.";
}
}
@Override
public String getDescription() {
return "commands for interacting with the scribengin cluster.";
}
}