class GxG::Networking::SshClient

SSH Client

Public Class Methods

new() click to toggle source
# File lib/gxg/net_clients.rb, line 4138
def initialize()
  @client = nil
  self
end

Public Instance Methods

async_download(the_remote_source=nil, the_destination=nil, options={}, &progress_block) click to toggle source
# File lib/gxg/net_clients.rb, line 4271
def async_download(the_remote_source=nil, the_destination=nil, options={}, &progress_block)
  result = false
  begin
    if @client
      unless the_remote_source.is_a?(::String)
        raise ArgumentError, "You MUST provide a local path as a String."
      end
      unless the_destination.is_a?(::String)
        raise ArgumentError, "You MUST provide a remote path as a String."
      end
      if progress_block.respond_to?(:call)
        channel = @client.scp.download(the_remote_source, the_destination, options, &progress_block)
      else
        channel = @client.scp.download(the_remote_source, the_destination, options)
      end
      channel.wait
      # True result means the request was sent, not that it completed.
      result = true
    end
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {:remote_path => the_remote_source, :local_path => the_destination, :options => options}})
  end
  result
end
async_upload(the_local_source=nil, the_destination=nil, options={}, &progress_block) click to toggle source
# File lib/gxg/net_clients.rb, line 4214
def async_upload(the_local_source=nil, the_destination=nil, options={}, &progress_block)
  result = false
  begin
    if @client
      unless the_local_source.is_a?(::String)
        raise ArgumentError, "You MUST provide a local path as a String."
      end
      unless the_destination.is_a?(::String)
        raise ArgumentError, "You MUST provide a remote path as a String."
      end
      if progress_block.respond_to?(:call)
        channel = @client.scp.upload(the_local_source, the_destination, options, &progress_block)
      else
        channel = @client.scp.upload(the_local_source, the_destination, options)
      end
      channel.wait
      # True result means the request was sent, not that it completed.
      result = true
    end
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {:local_path => the_local_source, :remote_path => the_destination, :options => options}})
  end
  result
end
channel_operations(&block) click to toggle source
# File lib/gxg/net_clients.rb, line 4176
def channel_operations(&block)
  result = nil
  begin
    if @client
      unless block.respond_to?(:call)
        raise ArgumentError, "You MUST provide a valid Block/Proc to execute."
      end
      result = @client.open_channel(&block)
    end
    #
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {:block => block}})
  end
  result
end
closed?() click to toggle source
# File lib/gxg/net_clients.rb, line 4206
def closed?()
  if @client
    false
  else
    true
  end
end
download(the_remote_source=nil, the_destination=nil, options={}, &progress_block) click to toggle source
# File lib/gxg/net_clients.rb, line 4296
def download(the_remote_source=nil, the_destination=nil, options={}, &progress_block)
  # options:
  #:recursive - the local parameter refers to a local directory, which should be uploaded to a new directory named remote
  # on the remote server.
  #
  #:preserve - the atime and mtime of the file should be preserved.
  #
  #:verbose - the process should result in verbose output on the server end (useful for debugging).
  #
  result = false
  begin
    if @client
      unless the_remote_source.is_a?(::String)
        raise ArgumentError, "You MUST provide a remote path as a String."
      end
      unless the_destination.is_a?(::String)
        raise ArgumentError, "You MUST provide a local path (or file name) as a String."
      end
      if progress_block.respond_to?(:call)
        result = @client.scp.download!(the_remote_source, the_destination, options, &progress_block)
      else
        result = @client.scp.download!(the_remote_source, the_destination, options)
      end
    end
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {:remote_path => the_remote_source, :local_path => the_destination, :options => options}})
  end
  result
end
login(the_url=nil, options={}) click to toggle source
# File lib/gxg/net_clients.rb, line 4143
def login(the_url=nil, options={})
  result = false
  begin
    unless the_url.is_a?(::URI::Generic)
      raise ArgumentError, "You MUST provide a valid URI"
    end
    if the_url.password
      options[:password] = the_url.password
    end
    @client = ::Net::SSH.start(the_url.hostname, the_url.user, options)
    result = true
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {:url => the_url, :options => options}})
  end
  result
end
logout() click to toggle source
# File lib/gxg/net_clients.rb, line 4192
def logout()
  result = false
  begin
    if @client
      @client.exec!("exit")
      @client = nil
      result = true
    end
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {}})
  end
  result
end
send_command(the_command=nil) click to toggle source
# File lib/gxg/net_clients.rb, line 4160
def send_command(the_command=nil)
  result = nil
  begin
    if @client
      unless the_command.is_a?(::String)
        raise ArgumentError, "You MUST provide a command as a String."
      end
      result = @client.exec!(the_command)
    end
    #
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {:command => the_command}})
  end
  result
end
upload(the_local_source=nil, the_destination=nil, options={}, &progress_block) click to toggle source
# File lib/gxg/net_clients.rb, line 4239
def upload(the_local_source=nil, the_destination=nil, options={}, &progress_block)
  # options:
  #:recursive - the local parameter refers to a local directory, which should be uploaded to a new directory named remote
  # on the remote server.
  #
  #:preserve - the atime and mtime of the file should be preserved.
  #
  #:verbose - the process should result in verbose output on the server end (useful for debugging).
  #
  #:chunk_size - the size of each "chunk" that should be sent. Defaults to 2048. Changing this value may
  # improve throughput at the expense of decreasing interactivity.
  result = false
  begin
    if @client
      unless the_local_source.is_a?(::String)
        raise ArgumentError, "You MUST provide a local path as a String."
      end
      unless the_destination.is_a?(::String)
        raise ArgumentError, "You MUST provide a remote path as a String."
      end
      if progress_block.respond_to?(:call)
        result = @client.scp.upload!(the_local_source, the_destination, options, &progress_block)
      else
        result = @client.scp.upload!(the_local_source, the_destination, options)
      end
    end
  rescue Exception => the_error
    log_error({:error => the_error, :parameters => {:local_path => the_local_source, :remote_path => the_destination, :options => options}})
  end
  result
end