Class: FileWatch::ObservingTail

Inherits:
Object
  • Object
show all
Includes:
TailBase
Defined in:
lib/filewatch/observing_tail.rb

Defined Under Namespace

Classes: NullListener, NullObserver

Constant Summary

Constants included from TailBase

TailBase::OPEN_WARN_INTERVAL

Instance Attribute Summary

Attributes included from TailBase

#logger

Instance Method Summary collapse

Methods included from TailBase

#close_file, #initialize, #quit, #sincedb_record_uid, #sincedb_write, #tail

Instance Method Details

#subscribe(observer = NullObserver.new) ⇒ Object



22
23
24
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
63
64
65
66
67
# File 'lib/filewatch/observing_tail.rb', line 22

def subscribe(observer = NullObserver.new)
  @watch.subscribe(@opts[:stat_interval],
                   @opts[:discover_interval]) do |event, watched_file|
    path = watched_file.path
    file_is_open = watched_file.file_open?
    listener = observer.listener_for(path)
    case event
    when :unignore
      listener.created
      _add_to_sincedb(watched_file, event) unless @sincedb.member?(watched_file.inode)
    when :create, :create_initial
      if file_is_open
        @logger.debug? && @logger.debug("#{event} for #{path}: file already open")
        next
      end
      if _open_file(watched_file, event)
        listener.created
        observe_read_file(watched_file, listener)
      end
    when :modify
      if file_is_open
        observe_read_file(watched_file, listener)
      else
        @logger.debug? && @logger.debug(":modify for #{path}, file is not open, opening now")
        if _open_file(watched_file, event)
          observe_read_file(watched_file, listener)
        end
      end
    when :delete
      if file_is_open
        @logger.debug? && @logger.debug(":delete for #{path}, closing file")
        observe_read_file(watched_file, listener)
        watched_file.file_close
      else
        @logger.debug? && @logger.debug(":delete for #{path}, file already closed")
      end
      listener.deleted
    when :timeout
      @logger.debug? && @logger.debug(":timeout for #{path}, closing file")
      watched_file.file_close
      listener.timed_out
    else
      @logger.warn("unknown event type #{event} for #{path}")
    end
  end # @watch.subscribe
end