Skip to content

Commit

Permalink
Merge pull request #194 from rollbar/improve-middleware-performance
Browse files Browse the repository at this point in the history
Improve middleware performance
  • Loading branch information
jondeandres committed Dec 10, 2014
2 parents 278ce5e + 3b81544 commit 8df754d
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 9 deletions.
4 changes: 4 additions & 0 deletions lib/rollbar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,10 @@ def report(level, message, exception, extra)
data[:person] = data[:person].call if is_proc
end

data[:request] = data[:request].call if data[:request].respond_to?(:call)
data[:context] = data[:context].call if data[:context].respond_to?(:call)
data.delete(:context) unless data[:context]

schedule_payload(payload)

log_instance_link(data)
Expand Down
3 changes: 1 addition & 2 deletions lib/rollbar/middleware/rack/builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ def call_with_rollbar(env)
end

def fetch_scope(env)
request_data = extract_request_data_from_rack(env)
{
:request => request_data,
:request => proc { extract_request_data_from_rack(env) },
:person => person_data_proc(env)
}
rescue Exception => e
Expand Down
21 changes: 17 additions & 4 deletions lib/rollbar/middleware/rails/rollbar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ def initialize(app)
end

def call(env)
self.request_data = nil

Rollbar.reset_notifier!

env['rollbar.scope'] = scope = fetch_scope(env)
Expand All @@ -34,17 +36,28 @@ def call(env)
end

def fetch_scope(env)
request_data = extract_request_data_from_rack(env)

# Scope a new notifier with request data and a Proc for person data
# for any reports that happen while a controller is handling a request

{
:request => request_data,
:request => proc { request_data(env) },
:person => person_data_proc(env),
:context => context(request_data)
:context => proc { context(request_data(env)) }
}
end

def request_data(env)
Thread.current[:'_rollbar.rails.request_data'] ||= extract_request_data(env)
end

def request_data=(value)
Thread.current[:'_rollbar.rails.request_data'] = value
end

def extract_request_data(env)
extract_request_data_from_rack(env)
end

def person_data_proc(env)
block = proc { extract_person_data_from_controller(env) }
return block unless defined?(ActiveRecord::Base)
Expand Down
3 changes: 1 addition & 2 deletions lib/rollbar/middleware/sinatra.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@ def call(env)
end

def fetch_scope(env)
request_data = extract_request_data_from_rack(env)
{
:request => request_data,
:request => proc { extract_request_data_from_rack(env) },
:person => person_data_proc(env)
}
rescue Exception => e
Expand Down
2 changes: 1 addition & 1 deletion spec/rollbar/middleware/sinatra_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def app
let(:logger_mock) { double('logger').as_null_object }

before do
Rollbar.reconfigure do |config|
Rollbar.configure do |config|
config.logger = logger_mock
config.framework = 'Sinatra'
end
Expand Down

0 comments on commit 8df754d

Please sign in to comment.