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