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