class FileWatch::ReadMode::Handlers::Base
Attributes
sincedb_collection[R]
Public Class Methods
new(processor, sincedb_collection, observer, settings)
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 10 def initialize(processor, sincedb_collection, observer, settings) @settings = settings @processor = processor @sincedb_collection = sincedb_collection @observer = observer end
Public Instance Methods
handle(watched_file)
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 21 def handle(watched_file) logger.trace? && logger.trace("handling:", :path => watched_file.path) unless watched_file.has_listener? watched_file.set_listener(@observer) end handle_specifically(watched_file) end
handle_specifically(watched_file)
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 29 def handle_specifically(watched_file) # some handlers don't need to define this method end
quit?()
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 17 def quit? @processor.watch.quit? end
Private Instance Methods
add_new_value_sincedb_collection(watched_file)
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 93 def add_new_value_sincedb_collection(watched_file) sincedb_value = SincedbValue.new(0) sincedb_value.set_watched_file(watched_file) logger.trace? && logger.trace("add_new_value_sincedb_collection:", :path => watched_file.path, :position => sincedb_value.position) sincedb_collection.set(watched_file.sincedb_key, sincedb_value) end
add_or_update_sincedb_collection(watched_file)
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 63 def add_or_update_sincedb_collection(watched_file) sincedb_value = @sincedb_collection.find(watched_file) if sincedb_value.nil? add_new_value_sincedb_collection(watched_file) elsif sincedb_value.watched_file == watched_file update_existing_sincedb_collection_value(watched_file, sincedb_value) else logger.trace? && logger.trace("add_or_update_sincedb_collection: the found sincedb_value has a watched_file - this is a rename, switching inode to this watched file") existing_watched_file = sincedb_value.watched_file if existing_watched_file.nil? sincedb_value.set_watched_file(watched_file) logger.trace("add_or_update_sincedb_collection: switching as new file") watched_file.rotate_as_file watched_file.update_bytes_read(sincedb_value.position) else sincedb_value.set_watched_file(watched_file) logger.trace? && logger.trace("add_or_update_sincedb_collection: switching from", :watched_file => watched_file.details) watched_file.rotate_from(existing_watched_file) end end watched_file.initial_completed end
open_file(watched_file)
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 35 def open_file(watched_file) return true if watched_file.file_open? logger.trace? && logger.trace("opening", :path => watched_file.path) begin watched_file.open rescue => e # don't emit this message too often. if a file that we can't # read is changing a lot, we'll try to open it more often, and spam the logs. now = Time.now.to_i logger.trace? && logger.trace("opening OPEN_WARN_INTERVAL is '#{OPEN_WARN_INTERVAL}'") if watched_file.last_open_warning_at.nil? || now - watched_file.last_open_warning_at > OPEN_WARN_INTERVAL backtrace = e.backtrace backtrace = backtrace.take(3) if backtrace && !logger.debug? logger.warn("failed to open", :path => watched_file.path, :exception => e.class, :message => e.message, :backtrace => backtrace) watched_file.last_open_warning_at = now else logger.trace? && logger.trace("suppressed warning (failed to open)", :path => watched_file.path, :exception => e.class, :message => e.message) end watched_file.watch # set it back to watch so we can try it again end if watched_file.file_open? watched_file.listener.opened true else false end end
update_existing_sincedb_collection_value(watched_file, sincedb_value)
click to toggle source
# File lib/filewatch/read_mode/handlers/base.rb, line 87 def update_existing_sincedb_collection_value(watched_file, sincedb_value) logger.trace? && logger.trace("update_existing_sincedb_collection_value: #{watched_file.path}, last value #{sincedb_value.position}, cur size #{watched_file.last_stat_size}") # sincedb_value is the source of truth watched_file.update_bytes_read(sincedb_value.position) end