require 'rbot/plugins'
require 'rbot/message'
require 'rbot/language'
+require 'rbot/journal'
module Irc
# loads and opens new registry databases, used by the plugins
attr_accessor :registry_factory
+ # web service
attr_accessor :webservice
+ # persistent message queue
+ attr_accessor :journal
+
# server we are connected to
# TODO multiserver
def server
log_session_start
+ @journal = Journal::JournalBroker.new(bot: self)
+
if $daemonize
log "Redirecting standard input/output/error"
[$stdin, $stdout, $stderr].each do |fd|
end
end
- def create(name, uri)
- log 'load journal storage adapter: ' + name
+ def self.create(name, uri)
+ warning 'load journal storage adapter: ' + name
load File.join(File.dirname(__FILE__), 'journal', name + '.rb')
cls = AbstractStorage.get_impl.first
cls.new(uri: uri)
def initialize(opts={})
# overrides the internal consumer with a block
@consumer = opts[:consumer]
+ @bot = opts[:bot]
# storage backend
if @bot
@storage = opts[:storage] || Storage.create(
else
@storage = opts[:storage]
end
+ unless @storage
+ warning 'journal broker: no storage set up, won\'t persist messages'
+ end
@queue = Queue.new
# consumer thread:
@thread = Thread.new do
def initialize(opts={})
@uri = opts[:uri] || 'postgresql://localhost/rbot_journal'
@conn = PG.connect(@uri)
+ @conn.exec('set client_min_messages = warning')
@version = @conn.exec('SHOW server_version;')[0]['server_version']
@version.gsub!(/^(\d+\.\d+)$/, '\1.0')