Module: FileWatch::TailBase
- Included in:
- ObservingTail, YieldingTail
- Defined in:
- lib/filewatch/tail_base.rb
Defined Under Namespace
Classes: NoSinceDBPathGiven
Constant Summary collapse
- OPEN_WARN_INTERVAL =
how often (in seconds) we @logger.warn a failed file open, per path.
ENV["FILEWATCH_OPEN_WARN_INTERVAL"] ? ENV["FILEWATCH_OPEN_WARN_INTERVAL"].to_i : 300
Instance Attribute Summary collapse
-
#logger ⇒ Object
Returns the value of attribute logger.
Instance Method Summary collapse
-
#close_file(path) ⇒ Object
close_file(path) is to be used by external code when it knows that it is completely done with a file.
- #initialize(opts = {}) ⇒ Object
-
#quit ⇒ Object
quit is a sort-of finalizer, it should be called for clean up before the instance is disposed of.
- #sincedb_record_uid(path, stat) ⇒ Object
- #sincedb_write(reason = nil) ⇒ Object
- #tail(path) ⇒ Object
Instance Attribute Details
#logger ⇒ Object
Returns the value of attribute logger.
20 21 22 |
# File 'lib/filewatch/tail_base.rb', line 20 def logger @logger end |
Instance Method Details
#close_file(path) ⇒ Object
close_file(path) is to be used by external code when it knows that it is completely done with a file. Other files or folders may still be being watched. Caution, once unwatched, a file can’t be watched again unless a new instance of this class begins watching again. The sysadmin should rename, move or delete the file.
205 206 207 208 209 210 211 |
# File 'lib/filewatch/tail_base.rb', line 205 def close_file(path) @watch.unwatch(path) file = @files.delete(path) return if file.nil? _sincedb_write file.close end |
#initialize(opts = {}) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/filewatch/tail_base.rb', line 25 def initialize(opts={}) @iswindows = ((RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/) != nil) if opts[:logger] @logger = opts[:logger] else @logger = Logger.new(STDERR) @logger.level = Logger::INFO end @files = {} @lastwarn = Hash.new { |h, k| h[k] = 0 } @buffers = {} @watch = FileWatch::Watch.new @watch.logger = @logger @sincedb = {} @sincedb_last_write = 0 @statcache = {} @opts = { :sincedb_write_interval => 10, :stat_interval => 1, :discover_interval => 5, :exclude => [], :start_new_files_at => :end, :delimiter => "\n" }.merge(opts) if !@opts.include?(:sincedb_path) @opts[:sincedb_path] = File.join(ENV["HOME"], ".sincedb") if ENV.include?("HOME") @opts[:sincedb_path] = ENV["SINCEDB_PATH"] if ENV.include?("SINCEDB_PATH") end if !@opts.include?(:sincedb_path) raise NoSinceDBPathGiven.new("No HOME or SINCEDB_PATH set in environment. I need one of these set so I can keep track of the files I am following.") end @watch.exclude(@opts[:exclude]) @watch.close_older = @opts[:close_older] @watch.ignore_older = @opts[:ignore_older] _sincedb_open end |
#quit ⇒ Object
quit is a sort-of finalizer, it should be called for clean up before the instance is disposed of.
191 192 193 194 195 196 |
# File 'lib/filewatch/tail_base.rb', line 191 def quit _sincedb_write @watch.quit @files.each {|path, file| file.close } @files.clear end |
#sincedb_record_uid(path, stat) ⇒ Object
76 77 78 79 80 |
# File 'lib/filewatch/tail_base.rb', line 76 def sincedb_record_uid(path, stat) inode = @watch.inode(path,stat) @statcache[path] = inode return inode end |
#sincedb_write(reason = nil) ⇒ Object
151 152 153 154 |
# File 'lib/filewatch/tail_base.rb', line 151 def sincedb_write(reason=nil) @logger.debug? && @logger.debug("caller requested sincedb write (#{reason})") _sincedb_write end |
#tail(path) ⇒ Object
71 72 73 |
# File 'lib/filewatch/tail_base.rb', line 71 def tail(path) @watch.watch(path) end |