/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.ambari.shell.commands; import static org.apache.ambari.shell.support.TableRenderer.renderSingleMap; import org.apache.ambari.groovy.client.AmbariClient; import org.apache.ambari.shell.model.AmbariContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.shell.core.CommandMarker; import org.springframework.shell.core.annotation.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; import org.springframework.stereotype.Component; /** * Basic commands used in the shell. Delegating the commands * to the Ambari Server via a Groovy based client. * * @see org.apache.ambari.groovy.client.AmbariClient */ @Component public class BasicCommands implements CommandMarker { private AmbariClient client; private AmbariContext context; @Autowired public BasicCommands(AmbariClient client, AmbariContext context) { this.client = client; this.context = context; } /** * Checks whether the tasks command is available or not. * * @return true if its available false otherwise */ @CliAvailabilityIndicator("tasks") public boolean isTasksCommandAvailable() { return context.isConnectedToCluster(); } /** * Prints the tasks of the Ambari Server. * * @param id id of the request * @return task list */ @CliCommand(value = "tasks", help = "Lists the Ambari tasks") public String tasks( @CliOption(key = "id", mandatory = false, help = "Id of the request; default is: 1", unspecifiedDefaultValue = "1") String id) { return renderSingleMap(client.getTaskMap(id), "TASK", "STATUS"); } /** * Checks whether the debug on command is available or not. * * @return true if available false otherwise */ @CliAvailabilityIndicator("debug on") public boolean isDebugOnCommandAvailable() { return !client.isDebugEnabled(); } /** * Turns the debug on. From now on users will see the URLs of the API calls. * * @return status message */ @CliCommand(value = "debug on", help = "Shows the URL of the API calls") public String debugOn() { client.setDebugEnabled(true); return "debug enabled"; } /** * Checks whether the debug off command is available or not. * * @return true if available false otherwise */ @CliAvailabilityIndicator("debug off") public boolean isDebugOffCommandAvailable() { return client.isDebugEnabled(); } /** * Turns the debug off. URLs are not visible anymore. * * @return status message */ @CliCommand(value = "debug off", help = "Stops showing the URL of the API calls") public String debugOff() { client.setDebugEnabled(false); return "debug disabled"; } /** * Checks whether the hint command is available or not. * * @return true if available false otherwise */ @CliAvailabilityIndicator("hint") public boolean isHintCommandAvailable() { return true; } /** * Provides some hints what you can do in the current context. * * @return hint message */ @CliCommand(value = "hint", help = "Shows some hints") public String hint() { return context.getHint(); } }