class Ryespy::Listener::FTP
Constants
- REDIS_KEY_PREFIX
- SIDEKIQ_JOB_CLASS
Public Class Methods
new(opts = {})
click to toggle source
Calls superclass method
Ryespy::Listener::Base::new
# File lib/ryespy/listener/ftp.rb, line 13 def initialize(opts = {}) @ftp_config = { :host => opts[:host], :port => opts[:port], :passive => opts[:passive], :username => opts[:username], :password => opts[:password], } super(opts) end
Public Instance Methods
check(dir)
click to toggle source
# File lib/ryespy/listener/ftp.rb, line 29 def check(dir) @logger.debug { "dir: #{dir}" } @logger.debug { "redis_key: #{redis_key(dir)}" } seen_files = @redis.hgetall(redis_key(dir)) unseen_files = get_unseen_files(dir, seen_files) @logger.debug { "unseen_files: #{unseen_files}" } unseen_files.each do |filename, checksum| @redis.hset(redis_key(dir), filename, checksum) @notifiers.each { |n| n.notify(SIDEKIQ_JOB_CLASS, [dir, filename]) } end @logger.info { "#{dir} has #{unseen_files.count} new files" } end
close()
click to toggle source
# File lib/ryespy/listener/ftp.rb, line 25 def close @ftp.close end
Private Instance Methods
connect_service()
click to toggle source
# File lib/ryespy/listener/ftp.rb, line 51 def connect_service @ftp = Net::FTP.new @ftp.connect(@ftp_config[:host], @ftp_config[:port]) @ftp.passive = @ftp_config[:passive] @ftp.login(@ftp_config[:username], @ftp_config[:password]) end
get_unseen_files(dir, seen_files)
click to toggle source
# File lib/ryespy/listener/ftp.rb, line 71 def get_unseen_files(dir, seen_files) @ftp.chdir(dir) files = {} @ftp.nlst.each do |file| mtime = @ftp.mtime(file).to_i size = @ftp.size(file) rescue nil # ignore non-file error if size # exclude directories checksum = "#{mtime},#{size}".freeze if seen_files[file] != checksum files[file] = checksum end end end files end
redis_key(dir)
click to toggle source
# File lib/ryespy/listener/ftp.rb, line 61 def redis_key(dir) [ REDIS_KEY_PREFIX, @ftp_config[:host], @ftp_config[:port], @ftp_config[:username], dir, ].join(':') end