Sha256: 59283ad9e29bbcbac64873f6b387f49b67b6140ad0bdf5e74c79b3aac7de8f35

Contents?: true

Size: 1.97 KB

Versions: 3

Compression:

Stored size: 1.97 KB

Contents

require 'net/sftp'
require 'net/sftp/errors'

class SSHTransfer
	attr :host 				
	attr :username 		
	attr :local_files 
	attr :upload_to
	attr :download_from
	attr :options
	attr :logger
	
	def initialize(opts)
		@options = {}
		opts.each{ |key, value| @options[key.to_sym] = value }
		@host = options.delete(:host)
		@username = options.delete(:username)
		@local_files = options.delete(:local_files)
		@upload_to = options.delete(:upload_to)
		@download_from = options.delete(:download_from)
		@logger = options.delete(:logger)
	end
		
	def upload
		Net::SFTP.start(host, username, options) do |sftp|
			Dir[local_files].each do |file|
				begin
					sftp.upload!(file, File.join(upload_to, File.basename(file)), :progress => self)
					File.delete(file)
				rescue Net::SFTP::StatusException => e
					on_file_error(file, e)
				end
			end		
		end
	end


	def download
		Net::SFTP.start(host, username, options) do |sftp|
			begin
				sftp.download!(download_from, local_files,  :progress => self, :recursive => true)
				sftp.dir.foreach(download_from) do |entry|
					sftp.remove!(File.join(download_from, entry.name)) if entry.file?
				end
			rescue Net::SFTP::StatusException => e
				on_file_error(nil, e)
			end
		end
	end
	
	# even handlers
	def on_open(uploader, file)
		logger.info "starting transfer: #{file.local} -> #{file.remote} (#{file.size} bytes)"
	end
	
	def on_file_error(file, exception)
		logger.error "error: " + exception
	end
	
	def on_put(uploader, file, offset, data)
		# puts "writing #{data.length} bytes to #{file.remote} starting at #{offset}"
	end

 	def on_get(downloader, file, offset, data)
		#puts "writing #{data.length} bytes to #{file.local} starting at #{offset}"
	end
	
	def on_mkdir(uploader, path)
		logger.info "creating directory #{path}"
	end

	def on_close(uploader, file)
		logger.info "finished with #{file.remote}"
	end

	def on_finish(uploader)
		logger.info "Transfer completed!"
	end
end	

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jcangas-datagateway-1.2.2 lib/datagateway/ssh_transfer.rb
jcangas-datagateway-1.4.4 lib/datagateway/ssh_transfer.rb
jcangas-datagateway-1.5.0 lib/datagateway/ssh_transfer.rb