Sha256: 4520fbf735fb9c32632d9bd2ae4a37f64fb70259910ca1161fa74b7434ef133e
Contents?: true
Size: 1.21 KB
Versions: 5
Compression:
Stored size: 1.21 KB
Contents
require 'roby/log' require 'roby/distributed' require 'sqlite3' require 'stringio' module Roby::Log class SQLiteLogger attr_reader :db, :insert def initialize(filename) @db = SQLite3::Database.new(filename) db.execute("DROP TABLE IF EXISTS events") db.execute("CREATE TABLE events ( method TEXT, sec INTEGER, usec INTEGER, args BLOB)") @insert = db.prepare("insert into events values (?, ?, ?, ?)") end def splat?; false end Roby::Log.each_hook do |klass, m| define_method(m) do |args| begin time = args[0] args = SQLite3::Blob.new Roby::Distributed.dump(args[1..-1]) insert.execute(m.to_s, time.tv_sec, time.tv_usec, args) rescue STDERR.puts "failed to dump #{m}#{args}: #{$!.full_message}" end end end def self.replay(filename) db = SQLite3::Database.new(filename) method_name = nil db.execute("select * from events") do |method_name, sec, usec, args| time = Time.at(Integer(sec), Integer(usec)) args = Marshal.load(StringIO.new(args)) args.unshift time yield(method_name.to_sym, args) end rescue STDERR.puts "ignoring call to #{method_name}: #{$!.full_message}" end end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
roby-0.8.0 | lib/roby/log/sqlite.rb |
roby-0.7.1 | lib/roby/log/sqlite.rb |
roby-0.7.2 | lib/roby/log/sqlite.rb |
roby-0.7 | lib/roby/log/sqlite.rb |
roby-0.7.3 | lib/roby/log/sqlite.rb |