blob: 34dbffee5139731b484e5ad4c67d1fa8bd13f0fe [file] [log] [blame]
/**
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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. See accompanying LICENSE file.
*/
package org.apache.hadoop.yarn.submarine.client.cli;
import com.google.common.annotations.VisibleForTesting;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.submarine.client.cli.param.ParametersHolder;
import org.apache.hadoop.yarn.submarine.client.cli.param.ShowJobParameters;
import org.apache.hadoop.yarn.submarine.common.ClientContext;
import org.apache.hadoop.yarn.submarine.common.exception.SubmarineException;
import org.apache.hadoop.yarn.submarine.runtimes.common.StorageKeyConstants;
import org.apache.hadoop.yarn.submarine.runtimes.common.SubmarineStorage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Map;
public class ShowJobCli extends AbstractCli {
private static final Logger LOG = LoggerFactory.getLogger(ShowJobCli.class);
private Options options;
private ParametersHolder parametersHolder;
public ShowJobCli(ClientContext cliContext) {
super(cliContext);
options = generateOptions();
}
public void printUsages() {
new HelpFormatter().printHelp("job show", options);
}
private Options generateOptions() {
Options options = new Options();
options.addOption(CliConstants.NAME, true, "Name of the job");
options.addOption("h", "help", false, "Print help");
return options;
}
private void parseCommandLineAndGetShowJobParameters(String[] args)
throws IOException, YarnException {
// Do parsing
GnuParser parser = new GnuParser();
CommandLine cli;
try {
cli = parser.parse(options, args);
parametersHolder = ParametersHolder
.createWithCmdLine(cli, Command.SHOW_JOB);
parametersHolder.updateParameters(clientContext);
} catch (ParseException e) {
printUsages();
}
}
private void printIfNotNull(String keyForPrint, String keyInStorage,
Map<String, String> jobInfo) {
if (jobInfo.containsKey(keyInStorage)) {
System.out.println("\t" + keyForPrint + ": " + jobInfo.get(keyInStorage));
}
}
private void printJobInfo(Map<String, String> jobInfo) {
System.out.println("Job Meta Info:");
printIfNotNull("Application Id", StorageKeyConstants.APPLICATION_ID,
jobInfo);
printIfNotNull("Input Path", StorageKeyConstants.INPUT_PATH, jobInfo);
printIfNotNull("Saved Model Path", StorageKeyConstants.SAVED_MODEL_PATH,
jobInfo);
printIfNotNull("Checkpoint Path", StorageKeyConstants.CHECKPOINT_PATH,
jobInfo);
printIfNotNull("Run Parameters", StorageKeyConstants.JOB_RUN_ARGS,
jobInfo);
}
@VisibleForTesting
protected void getAndPrintJobInfo() throws IOException {
SubmarineStorage storage =
clientContext.getRuntimeFactory().getSubmarineStorage();
Map<String, String> jobInfo = null;
try {
jobInfo = storage.getJobInfoByName(getParameters().getName());
} catch (IOException e) {
LOG.error("Failed to retrieve job info", e);
throw e;
}
printJobInfo(jobInfo);
}
@VisibleForTesting
public ShowJobParameters getParameters() {
return (ShowJobParameters) parametersHolder.getParameters();
}
@Override
public int run(String[] args)
throws ParseException, IOException, YarnException, InterruptedException,
SubmarineException {
if (CliUtils.argsForHelp(args)) {
printUsages();
return 0;
}
parseCommandLineAndGetShowJobParameters(args);
getAndPrintJobInfo();
return 0;
}
}