Skip to content

Commit

Permalink
POC for logging
Browse files Browse the repository at this point in the history
  • Loading branch information
jdelStrother committed May 12, 2021
1 parent 62ad386 commit 2ba1a14
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 16 deletions.
4 changes: 4 additions & 0 deletions lib/mock_redis.rb
Expand Up @@ -65,6 +65,10 @@ def db
options[:db]
end

def logger
options[:logger]
end

def time_at(timestamp)
options[:time_class].at(timestamp)
end
Expand Down
59 changes: 48 additions & 11 deletions lib/mock_redis/database.rb
Expand Up @@ -15,17 +15,29 @@

class MockRedis
class Database
include HashMethods
include ListMethods
include SetMethods
include StringMethods
include ZsetMethods
include SortMethod
include InfoMethod
include UtilityMethods
include GeospatialMethods
include StreamMethods
include ConnectionMethod
[
HashMethods,
ListMethods,
SetMethods,
StringMethods,
ZsetMethods,
SortMethod,
InfoMethod,
UtilityMethods,
GeospatialMethods,
StreamMethods,
ConnectionMethod
].each do |mod|
include mod

mod.public_instance_methods(false).each do |m|
define_method m do |*args, &block|
logging([[m, *args]]) do
super(*args, &block)
end
end
end
end

attr_reader :data, :expire_times

Expand Down Expand Up @@ -369,5 +381,30 @@ def expire_keys
del(key)
end
end

def logging(commands)
logger = @base&.logger
return yield unless logger&.debug?

begin
commands.each do |name, *args|
logged_args = args.map do |a|
if a.respond_to?(:inspect) then a.inspect
elsif a.respond_to?(:to_s) then a.to_s
else
# handle poorly-behaved descendants of BasicObject
klass = a.instance_exec { (class << self; self end).superclass }
"\#<#{klass}:#{a.__id__}>"
end
end
logger.debug("[MockRedis] command=#{name.to_s.upcase} args=#{logged_args.join(' ')}")
end

t1 = Time.now
yield
ensure
logger.debug("[MockRedis] call_time=%0.2f ms" % ((Time.now - t1) * 1000)) if t1
end
end
end
end
2 changes: 1 addition & 1 deletion spec/commands/hscan_each_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'

describe '#hscan_each' do
subject { MockRedis::Database.new(self) }
subject { MockRedis::Database.new(double('base', logger: nil)) }

let(:key) { 'mock-redis-test:hscan_each' }

Expand Down
2 changes: 1 addition & 1 deletion spec/commands/scan_each_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'

describe '#scan_each' do
subject { MockRedis::Database.new(self) }
subject { MockRedis::Database.new(double('base', logger: nil)) }

let(:match) { '*' }

Expand Down
2 changes: 1 addition & 1 deletion spec/commands/scan_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'

describe '#scan' do
subject { MockRedis::Database.new(self) }
subject { MockRedis::Database.new(double('base', logger: nil)) }

let(:count) { 10 }
let(:match) { '*' }
Expand Down
2 changes: 1 addition & 1 deletion spec/commands/sscan_each_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'

describe '#sscan_each' do
subject { MockRedis::Database.new(self) }
subject { MockRedis::Database.new(double('base', logger: nil)) }

let(:key) { 'mock-redis-test:sscan_each' }

Expand Down
2 changes: 1 addition & 1 deletion spec/commands/zscan_each_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'

describe '#zscan_each' do
subject { MockRedis::Database.new(self) }
subject { MockRedis::Database.new(double('base', logger: nil)) }

let(:key) { 'mock-redis-test:zscan_each' }

Expand Down

0 comments on commit 2ba1a14

Please sign in to comment.