class FileWatch::SincedbRecordSerializer

Public Class Methods

days_to_seconds(days) click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 6
def self.days_to_seconds(days)
  (24 * 3600) * days.to_f
end
new(sincedb_value_expiry) click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 10
def initialize(sincedb_value_expiry)
  @sincedb_value_expiry = sincedb_value_expiry
end

Public Instance Methods

deserialize(io) { |deserialize_record(record)| ... } click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 27
def deserialize(io)
  io.each do |record|
    yield deserialize_record(record) #.tap{|val| STDERR.puts val}
  end
end
deserialize_record(record) click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 37
def deserialize_record(record)
  return [] if record.nil? || record.empty?
  parts = record.split(" ")
  parse_line_v2(parts) || parse_line_v1(parts)
end
serialize(db, io, as_of = Time.now.to_f) click to toggle source

@return Array expired keys (ones that were not written to the file)

# File lib/filewatch/sincedb_record_serializer.rb, line 15
def serialize(db, io, as_of = Time.now.to_f)
  expired_keys = []
  db.each do |key, value|
    if as_of > value.last_changed_at_expires(@sincedb_value_expiry)
      expired_keys << key
      next
    end
    io.write(serialize_record(key, value))
  end
  expired_keys
end
serialize_record(k, v) click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 33
def serialize_record(k, v)
  "#{k} #{v}\n" # effectively InodeStruct#to_s SincedbValue#to_s
end

Private Instance Methods

parse_line_v1(parts) click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 57
def parse_line_v1(parts)
  # old inode based e.g. 2977152 1 4 94
  inode_struct = prepare_inode_struct(parts)
  pos = parts.shift.to_i
  [inode_struct, SincedbValue.new(pos)]
end
parse_line_v2(parts) click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 45
def parse_line_v2(parts)
  # new format e.g. 2977152 1 4 94 1519319662.852678 'path/to/file'
  # do we want to store the last known state of the watched file too?
  return false if parts.size < 5
  inode_struct = prepare_inode_struct(parts)
  pos = parts.shift.to_i
  expires_at = Float(parts.shift) # this is like Time.now.to_f
  path_in_sincedb = parts.join(" ")
  value = SincedbValue.new(pos, expires_at).add_path_in_sincedb(path_in_sincedb)
  [inode_struct, value]
end
prepare_inode_struct(parts) click to toggle source
# File lib/filewatch/sincedb_record_serializer.rb, line 64
def prepare_inode_struct(parts)
  InodeStruct.new(parts.shift, *parts.shift(2).map(&:to_i))
end