/*
* Copyright 2014 University of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.usc.pgroup.floe.client.commands;
import edu.usc.pgroup.floe.client.FloeClient;
import edu.usc.pgroup.floe.thriftgen.ScaleDirection;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.thrift.TException;
import org.slf4j.LoggerFactory;
/**
* @author kumbhare
*/
public final class Scale {
/**
* Hiding the default constructor.
*/
private Scale() {
}
/**
* the global logger instance.
*/
private static final org.slf4j.Logger LOGGER =
LoggerFactory.getLogger(Scale.class);
/**
* Entry point for Scale command.
* @param args command line arguments sent by the floe.py script.
*/
public static void main(final String[] args) {
Options options = new Options();
Option dirOption = OptionBuilder.withArgName("direction")
.hasArg().isRequired()
.withDescription("Scale Direction.")
.create("dir");
Option appOption = OptionBuilder.withArgName("name")
.hasArg().isRequired()
.withDescription("Application Name")
.create("app");
Option pelletNameOption = OptionBuilder.withArgName("name")
.hasArg().isRequired()
.withDescription("Pellet Name")
.create("pellet");
Option cntOption = OptionBuilder.withArgName("num")
.hasArg().withType(new String())
.withDescription("Number of instances to scale up/down")
.create("cnt");
options.addOption(dirOption);
options.addOption(appOption);
options.addOption(pelletNameOption);
options.addOption(cntOption);
CommandLineParser parser = new BasicParser();
CommandLine line;
try {
line = parser.parse(options, args);
} catch (ParseException e) {
LOGGER.error("Invalid command: " + e.getMessage());
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("scale options", options);
return;
}
String dir = line.getOptionValue("dir");
String app = line.getOptionValue("app");
String pellet = line.getOptionValue("pellet");
String cnt = line.getOptionValue("cnt");
LOGGER.info("direction: {}", dir);
LOGGER.info("Application: {}", app);
LOGGER.info("Pellet: {}", pellet);
LOGGER.info("count: {}", cnt);
ScaleDirection direction = Enum.valueOf(ScaleDirection.class, dir);
int count = Integer.parseInt(cnt);
try {
FloeClient.getInstance().getClient().scale(
direction, app, pellet, count
);
} catch (TException e) {
LOGGER.error("Error while connecting to the coordinator: {}", e);
}
}
}