class LaunchDarkly::FileDataSourceImpl::FileDataSourcePoller

Used internally by FileDataSource to track data file changes if the 'listen' gem is not available.

Public Class Methods

new(resolved_paths, interval, reloader, logger) click to toggle source
# File lib/ldclient-rb/file_data_source.rb, line 272
def initialize(resolved_paths, interval, reloader, logger)
  @stopped = Concurrent::AtomicBoolean.new(false)
  get_file_times = Proc.new do
    ret = {}
    resolved_paths.each do |path|
      begin
        ret[path] = File.mtime(path)
      rescue Errno::ENOENT
        ret[path] = nil
      end
    end
    ret
  end
  last_times = get_file_times.call
  @thread = Thread.new do
    while true
      sleep interval
      break if @stopped.value
      begin
        new_times = get_file_times.call
        changed = false
        last_times.each do |path, old_time|
          new_time = new_times[path]
          if !new_time.nil? && new_time != old_time
            changed = true
            break
          end
        end
        reloader.call if changed
      rescue => exn
        Util.log_exception(logger, "Unexpected exception in FileDataSourcePoller", exn)
      end
    end
  end
end

Public Instance Methods

stop() click to toggle source
# File lib/ldclient-rb/file_data_source.rb, line 308
def stop
  @stopped.make_true
  @thread.run  # wakes it up if it's sleeping
end