Class: Evesync::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/evesync/database.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(db_path = nil, db_files_path = nil) ⇒ Database

Returns a new instance of Database.



23
24
25
26
27
28
29
30
31
32
33
# 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

Instance Method Details

#eventsObject

Events simplified: object => [timestamp…]



51
52
53
54
55
56
57
58
59
# 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) ⇒ Object

Messages for events: object => => message



62
63
64
65
66
67
68
69
70
71
72
73
74
# 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) ⇒ Object

Save message to database, key is timestamp+object



36
37
38
39
40
41
42
43
44
45
46
47
48
# 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