/*
*
* * RHQ Management Platform
* * Copyright (C) 2005-2012 Red Hat, Inc.
* * All rights reserved.
* *
* * This program is free software; you can redistribute it and/or modify
* * it under the terms of the GNU General Public License, version 2, as
* * published by the Free Software Foundation, and/or the GNU Lesser
* * General Public License, version 2.1, also as published by the Free
* * Software Foundation.
* *
* * This program is distributed in the hope that it will be useful,
* * but WITHOUT ANY WARRANTY; without even the implied warranty of
* * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* * GNU General Public License and the GNU Lesser General Public License
* * for more details.
* *
* * You should have received a copy of the GNU General Public License
* * and the GNU Lesser General Public License along with this program;
* * if not, write to the Free Software Foundation, Inc.,
* * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
package org.rhq.metrics.simulator;
import java.io.File;
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.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.metrics.simulator.plan.SimulationPlan;
import org.rhq.metrics.simulator.plan.SimulationPlanner;
/**
* @author John Sanda
*/
public class SimulatorCLI {
private final Log log = LogFactory.getLog(SimulatorCLI.class);
private Options options;
public SimulatorCLI() {
options = new Options();
Option help = new Option("h", "help", false, "Display this message.");
options.addOption(help);
Option simulation = new Option("s", "simulation", true, "The simulation to run. Expected to be a JSON file.");
options.addOption(simulation);
}
public void exec(String[] args) {
if (args.length == 0) {
printUsage();
System.exit(1);
}
try {
CommandLineParser parser = new PosixParser();
CommandLine cmdLine = parser.parse(options, args);
if (cmdLine.hasOption("h")) {
printUsage();
} else if (cmdLine.hasOption("s")) {
runSimulator(cmdLine.getOptionValue("s"));
} else {
printUsage();
}
} catch (ParseException e) {
printUsage();
}
}
public void printUsage() {
HelpFormatter helpFormatter = new HelpFormatter();
String syntax = "rhq-ms [options]";
String header = "";
helpFormatter.setOptPrefix("");
helpFormatter.printHelp(syntax, header, options, null);
}
public void runSimulator(String file) {
File planFile = new File(file);
if (!planFile.exists()) {
throw new RuntimeException("Simulation file [" + file + "] does not exist.");
}
if (planFile.isDirectory()) {
throw new RuntimeException("[" + file + "] is a directory. The --simulation argument must refer to a " +
"file.");
}
SimulationPlanner planner = new SimulationPlanner();
SimulationPlan plan = null;
try {
plan = planner.create(planFile);
} catch (Exception e) {
throw new RuntimeException("Failed to create simulation: " + e.getMessage(), e);
}
Simulator simulator = new Simulator();
try {
simulator.run(plan);
} catch (Throwable t) {
System.out.println(t);
}
}
public static void main(String[] args) {
SimulatorCLI cli = new SimulatorCLI();
try {
cli.exec(args);
} catch (Exception e) {
cli.log.error("There was an unxpected error", e);
System.exit(1);
}
}
}