Skip to content

Commit

Permalink
Merge commit 'josevalim/arlog'
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremy committed Dec 30, 2009
2 parents 0c7c842 + 4ecdf24 commit 3a29aa3
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 32 deletions.
39 changes: 39 additions & 0 deletions actionpack/test/activerecord/controller_runtime_test.rb
@@ -0,0 +1,39 @@
require 'active_record_unit'
require 'active_record/rails/controller_runtime'
require 'fixtures/project'

ActionController::Base.send :include, ActiveRecord::Rails::ControllerRuntime

class ARLoggingController < ActionController::Base
def show
render :inline => "<%= Project.all %>"
end
end

class ARLoggingTest < ActionController::TestCase
tests ARLoggingController

def setup
super
set_logger
end

def wait
ActiveSupport::Notifications.notifier.wait
end

def test_log_with_active_record
get :show
wait
assert_match /ActiveRecord runtime/, logs[3]
end

private
def set_logger
@controller.logger = MockLogger.new
end

def logs
@logs ||= @controller.logger.logged.compact.map {|l| l.to_s.strip}
end
end
1 change: 0 additions & 1 deletion activerecord/lib/active_record/base.rb
@@ -1,4 +1,3 @@
require 'benchmark'
require 'yaml' require 'yaml'
require 'set' require 'set'
require 'active_support/benchmarkable' require 'active_support/benchmarkable'
Expand Down
@@ -1,6 +1,7 @@
require 'date' require 'date'
require 'bigdecimal' require 'bigdecimal'
require 'bigdecimal/util' require 'bigdecimal/util'
require 'active_support/core_ext/benchmark'


# TODO: Autoload these files # TODO: Autoload these files
require 'active_record/connection_adapters/abstract/schema_definitions' require 'active_record/connection_adapters/abstract/schema_definitions'
Expand Down Expand Up @@ -191,16 +192,19 @@ def current_savepoint_name
end end


def log_info(sql, name, ms) def log_info(sql, name, ms)
@runtime += ms
if @logger && @logger.debug? if @logger && @logger.debug?
name = '%s (%.1fms)' % [name || 'SQL', ms] name = '%s (%.1fms)' % [name || 'SQL', ms]
@logger.debug(format_log_entry(name, sql.squeeze(' '))) @logger.debug(format_log_entry(name, sql.squeeze(' ')))
end end
end end


protected protected
def log(sql, name, &block) def log(sql, name)
ActiveSupport::Notifications.instrument(:sql, :sql => sql, :name => name, &block) result = nil
ActiveSupport::Notifications.instrument(:sql, :sql => sql, :name => name) do
@runtime += Benchmark.ms { result = yield }
end
result
rescue Exception => e rescue Exception => e
# Log message and raise exception. # Log message and raise exception.
# Set last_verification to 0, so that connection gets verified # Set last_verification to 0, so that connection gets verified
Expand Down
27 changes: 0 additions & 27 deletions activerecord/lib/active_record/controller_runtime.rb

This file was deleted.

3 changes: 2 additions & 1 deletion activerecord/lib/active_record/rails.rb
Expand Up @@ -3,13 +3,14 @@
# here. This is needed for correctly setting up the middleware. # here. This is needed for correctly setting up the middleware.
# In the future, this might become an optional require. # In the future, this might become an optional require.
require "action_controller/rails" require "action_controller/rails"
require "active_record/rails/controller_runtime"


module ActiveRecord module ActiveRecord
class Plugin < Rails::Plugin class Plugin < Rails::Plugin
plugin_name :active_record plugin_name :active_record
include_modules_in "ActiveRecord::Base" include_modules_in "ActiveRecord::Base"


config.action_controller.include "ActiveRecord::ControllerRuntime" config.action_controller.include "ActiveRecord::Rails::ControllerRuntime"


rake_tasks do rake_tasks do
load "active_record/rails/databases.rake" load "active_record/rails/databases.rake"
Expand Down
29 changes: 29 additions & 0 deletions activerecord/lib/active_record/rails/controller_runtime.rb
@@ -0,0 +1,29 @@
module ActiveRecord
module Rails
module ControllerRuntime
extend ActiveSupport::Concern

attr_internal :db_runtime

def cleanup_view_runtime
if ActiveRecord::Base.connected?
db_rt_before_render = ActiveRecord::Base.connection.reset_runtime
runtime = super
db_rt_after_render = ActiveRecord::Base.connection.reset_runtime
self.db_runtime = db_rt_before_render + db_rt_after_render
runtime - db_rt_after_render
else
super
end
end

module ClassMethods
def log_process_action(controller)
super
db_runtime = controller.send :db_runtime
logger.info(" ActiveRecord runtime: %.1fms" % db_runtime.to_f) if db_runtime
end
end
end
end
end

0 comments on commit 3a29aa3

Please sign in to comment.