Skip to content

Instantly share code, notes, and snippets.

@Sutto
Created April 4, 2009 04:04
Show Gist options
  • Select an option

  • Save Sutto/90105 to your computer and use it in GitHub Desktop.

Select an option

Save Sutto/90105 to your computer and use it in GitHub Desktop.
require 'couchrest'
class LoggerHandler < Marvin::Base
cattr_accessor :database
self.database = CouchRest.database! 'http://127.0.0.1:5984/couchbot'
attr_accessor :messages_buffer
def initialize
super
self.messages_buffer = []
end
on_event :incoming_message do
log_message(options.nick, options.target, options.message)
end
on_event :client_connected do
logger.info "Adding timer for writing to the db"
callback = proc { self.write_db! }
EventMachine::add_periodic_timer(30, &callback)
end
on_event :client_disconnected do
logger.info "Client disconnected"
write_db!
end
on_event :dump_messages do
write_db!
end
def log_message(from, to, contents)
doc = {
"type" => "message",
"origin" => from,
"target" => to,
"contents" => contents,
"for_channel" => (target[0, 1] == "#"),
"posted_at" => Time.now
}
self.messages_buffer << doc
end
def write_db!
messages = self.messages_buffer
self.messages_buffer = []
logger.info "Dumping #{messages.size} messages to disk"
self.database.bulk_save(messages) unless messages.empty?
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment