Class RemoteRestAdminCommand

  • All Implemented Interfaces:
    AdminCommandEventBroker<GfSseInboundEvent>
    Direct Known Subclasses:
    ServerRemoteRestAdminCommand

    public class RemoteRestAdminCommand
    extends AdminCommandEventBrokerImpl<GfSseInboundEvent>
    Utility class for executing remote admin commands. Each instance of RemoteAdminCommand represents a particular remote command on a particular remote server accessed using particular credentials. The instance can be reused to execute the same command multiple times with different arguments.

    Arguments to the command are supplied using a ParameterMap passed to the executeCommand method. ParameterMap is a MultiMap where each key can have multiple values, although this class only supports a single value for each option. Operands for the command are stored as the option named "DEFAULT" and can have multiple values.

    Before a command can be executed, the metadata for the command (in the form of a CommandModel) is required. The getCommandModel method will fetch the metadata from the server, save it, and return it. If the CommandModel for a command is known independently (e.g., stored in a local cache, or known a priori), it can be set using the setCommandModel method. If the metadata isn't known when the exectureCommand method is called, it will fetch the metadata from the server before executing the command.

    Any files returned by the command will be stored in the current directory. The setFileOutputDirectory method can be used to control where returned files are saved.

    This implementation is now in retention period. All content was migrated to RemoteRestAdminCommand. This implementation will be removed just after all necessary changes and tests will be done.

    • Field Detail

      • output

        protected String output
      • port

        protected int port
      • secure

        protected boolean secure
      • notify

        protected boolean notify
      • password

        protected char[] password
      • logger

        protected Logger logger
      • scope

        protected String scope
      • authToken

        protected String authToken
      • prohibitDirectoryUploads

        protected boolean prohibitDirectoryUploads
    • Method Detail

      • setResponseFormatType

        public void setResponseFormatType​(String responseFormatType)
        Set the response type used in requests to the server. The response type is sent in the User-Agent HTTP header and tells the server what format of response to produce.
      • setUserOut

        @Deprecated
        public void setUserOut​(OutputStream userOut)
        Deprecated.
        If set, the raw response from the command is written to the specified stream.
      • setCommandModel

        public void setCommandModel​(CommandModel commandModel)
        Set the CommandModel used by this command. Normally the CommandModel will be fetched from the server using the getCommandModel method, which will also save the CommandModel for further use. If the CommandModel is known in advance, it can be set with this method and avoid the call to the server.
      • setReadTimeout

        public void setReadTimeout​(int readTimeout)
        Set the read timeout for the URLConnection.
        Parameters:
        readTimeout - timeout in milliseconds
      • getReadTimeout

        public static int getReadTimeout()
      • findPropertyInReport

        public String findPropertyInReport​(String key)
      • setConnectTimeout

        public void setConnectTimeout​(int connectTimeout)
        Set the connect timeout for the URLConnection.
        Parameters:
        connectTimeout - timeout in milliseconds
      • setInteractive

        public void setInteractive​(boolean state)
        Set the interactive mode for the command. By default, the command is interactive.
        Parameters:
        state - interactive state
      • setEnableCommandModelCache

        public void setEnableCommandModelCache​(boolean enableCommandModelCache)
      • getCommandModel

        public CommandModel getCommandModel()
                                     throws CommandException
        Get the CommandModel for the command from the server. If the CommandModel hasn't been set, it's fetched from the server.
        Returns:
        the model for the command
        Throws:
        CommandException - if the server can't be contacted
      • isCommandModelFromCache

        public boolean isCommandModelFromCache()
        If command model was load from local cache.
        Returns:
      • setFileOutputDirectory

        public void setFileOutputDirectory​(File dir)
        Set the directory in which any returned files will be stored. The default is the user's home directory.
        Parameters:
        dir -
      • headers

        public List<Header> headers()
        Return a modifiable list of headers to be added to the request.
        Returns:
      • refetchInvalidModel

        protected boolean refetchInvalidModel()
        If admin model is invalid, will be automatically refetched?
      • getAttributes

        public Map<String,​String> getAttributes()
        After a successful command execution, the attributes returned by the command are saved. This method returns those saved attributes.
      • updateAuthentication

        protected boolean updateAuthentication()
        Return true if we're successful in collecting new information (and thus the caller should try the request again). Subclasses can override to (e.g.) collect updated authentication information by prompting the user. The implementation in this class returns false, indicating that the authentication information was not updated.
      • getFromEnvironment

        protected String getFromEnvironment​(String name)
        Subclasses can override to supply parameter values from environment. The implementation in this class returns null, indicating that the name is not available in the environment.
      • retryUsingSecureConnection

        protected boolean retryUsingSecureConnection​(String host,
                                                     int port)
        Called when a non-secure connection attempt fails and it appears that the server requires a secure connection. Subclasses can override to indicate that the connection should The implementation in this class returns false, indicating that the connection should not be retried.
        Parameters:
        host - unused in this class
        port - unused in this class
        Returns:
        if the connection should be retried
      • reportAuthenticationException

        protected String reportAuthenticationException()
        Return the error message to be used in the AuthenticationException. Subclasses can override to provide a more detailed message, for example, indicating the source of the password that failed. The implementation in this class returns a default error message.
        Returns:
        the error message
      • getCommandURI

        protected String getCommandURI()
        Get the URI for executing the command.
      • setActionReport

        protected void setActionReport​(ActionReport ar)
      • getHttpConnectorAddress

        protected HttpConnectorAddress getHttpConnectorAddress​(String host,
                                                               int port,
                                                               boolean shouldUseSecure)
        Provides an HttpConnectorAddress for use in connecting to the desired admin listener.

        This implementation works for true admin clients and will not work correctly for commands submitted to instances from inside the DAS. (That is done from the implementation in ServerRemoteAdminCommand which extends this class.)

        This code constructs the HttpConnectorAddress in a way that uses either no SSLSocketFactory (if security is off) or uses an SSLSocketFactory linked to the asadmin truststore.

        Parameters:
        host - the host name to which the connection should be made
        port - the admin port on that host
        shouldUseSecure - whether SSL should be used to connect or not
        Returns:
      • addAdditionalHeaders

        protected void addAdditionalHeaders​(URLConnection urlConnection)
        Adds any headers needed for the current environment to the admin request.
        Parameters:
        urlConnection -
      • processHeaders

        protected void processHeaders​(URLConnection urlConnection)
        Process any headers needed from the reply to the admin request. Subclasses can override this method to handle processing headers in the command's reply.
        Parameters:
        urlConnection -
      • getUsage

        public String getUsage()
        Get the usage text. If we got usage information from the server, use it.
        Returns:
        usage text
      • fetchCommandModel

        protected void fetchCommandModel()
                                  throws CommandException
        Fetch the command metadata from the remote server.
        Throws:
        CommandException - If unable to get the commmand model
      • getCanonicalHost

        protected String getCanonicalHost()
      • preinit

        public static void preinit()
        Can be called to start async preinitialisation. It can help a little bit in usage performance.