class Evesync::Database
Database class is a proxy for evedatad daemon implements at least one method: save
. Allows Local evemond
save messages about changes
Messages should be serializable (JSON)
TODO:
* Think about how it can be widened
Public Class Methods
new(db_path=nil, db_files_path=nil)
click to toggle source
# File lib/evesync/database.rb, line 23 def initialize(db_path=nil, db_files_path=nil) path = db_path || Config[:evedatad]['db_path'] unless ::File.exist? path # FIXME: only root. handle exception FileUtils.mkdir_p(path) end @env = LMDB.new(path) @db = @env.database @files_path = db_files_path || Config[:evedatad]['db_files_path'] end
Public Instance Methods
events()
click to toggle source
Events simplified: object => [timestamp…]
# File lib/evesync/database.rb, line 51 def events events = {} @db.each do |key, _| timestamp, object = parse_event(key) events[object] ||= [] events[object].push(timestamp) end events end
messages(events)
click to toggle source
Messages for events: object => {timestamp => message}
# File lib/evesync/database.rb, line 62 def messages(events) ev_msgs = {} @db.each do |key, message| timestamp, object = parse_event(key) next unless events.include?(object) ev_msgs[object] ||= {} if events[object].include?(timestamp) ev_msgs[object][timestamp] = message end end ev_msgs end
save(message)
click to toggle source
Save message to database, key is timestamp+object
# File lib/evesync/database.rb, line 36 def save(message) Log.debug("Database save: #{message}") db_add_entry(message) if message.is_a? Evesync::IPC::Data::File Log.debug("Database save file action: #{message.action}") unless message.action == IPC::Data::File::Action::DELETE save_file(message) end end true end
Private Instance Methods
create_key(message)
click to toggle source
# File lib/evesync/database.rb, line 86 def create_key(message) "#{message.timestamp}_#{message.name}" end
create_value(message)
click to toggle source
# File lib/evesync/database.rb, line 90 def create_value(message) message.to_hash.to_json end
db_add_entry(message)
click to toggle source
# File lib/evesync/database.rb, line 78 def db_add_entry(message) Log.debug('Database adding entry...') key = create_key(message) value = create_value(message) @db[key] = value Log.debug('Database adding entry done!') end
parse_event(key)
click to toggle source
# File lib/evesync/database.rb, line 94 def parse_event(key) key.split('_', 2) end
save_file(file)
click to toggle source
# File lib/evesync/database.rb, line 98 def save_file(file) Log.debug('Database saving file...') fulldest = File.join(@files_path, file.name + ".#{file.timestamp}") FileUtils.mkdir_p(File.dirname(fulldest)) FileUtils.cp(file.name, fulldest) Log.debug('Database saving file done!') end