Permalink
Browse files

Instrument each load config initializer

In order to simplify profiling loading of initializers,
added instument for tracking load config initializer event from
`config/initializers`
  • Loading branch information...
1 parent 93e752c commit 251923c7a85a303d74b41255c39d8928ffa109ea @pftg pftg committed Nov 11, 2013
@@ -396,6 +396,15 @@ INFO. Cache stores my add their own keys
}
```
+Railties
+--------
+
+### load_config_initializer.railties
+
+| Key | Value |
+| -------------- | ----------------------------------------------------- |
+| `:initializer` | Path to loaded initializer from `config/initializers` |
+
Rails
-----
View
@@ -1,3 +1,33 @@
+* Instrument an `load_config_initializer.railties` event on each load of configuration initializer
+ from `config/initializers`. Subscribers should be attached before `load_config_initializers`
+ initializer completed.
+
+ Registering subscriber examples:
+
+ # config/application.rb
+ module RailsApp
+ class Application < Rails::Application
+ ActiveSupport::Notifications.subscribe('load_config_initializer.railties') do |*args|
+ event = ActiveSupport::Notifications::Event.new(*args)
+ puts "Loaded initializer #{event.payload[:initializer]} (#{event.duration}ms)"
+ end
+ end
+ end
+
+ # my_engine/lib/my_engine/engine.rb
+ module MyEngine
+ class Engine < ::Rails::Engine
+ config.before_initialize do
+ ActiveSupport::Notifications.subscribe('load_config_initializer.railties') do |*args|
+ event = ActiveSupport::Notifications::Event.new(*args)
+ puts "Loaded initializer #{event.payload[:initializer]} (#{event.duration}ms)"
+ end
+ end
+ end
+ end
+
+ *Paul Nikitochkin*
+
* Support for Pathnames in eager load paths.
*Mike Pack*
@@ -611,7 +611,7 @@ def load_seed
initializer :load_config_initializers do
config.paths["config/initializers"].existent.sort.each do |initializer|
- load(initializer)
+ load_config_initializer(initializer)
end
end
@@ -645,6 +645,12 @@ def routes? #:nodoc:
protected
+ def load_config_initializer(initializer)
+ ActiveSupport::Notifications.instrument('load_config_initializer.railties', initializer: initializer) do
+ load(initializer)
+ end
+ end
+
def run_tasks_blocks(*) #:nodoc:
super
paths["lib/tasks"].existent.sort.each { |ext| load(ext) }
@@ -39,5 +39,18 @@ def wait
assert_equal 1, logger.logged(:debug).size
assert_match(/SHOW tables/, logger.logged(:debug).last)
end
+
+ test 'rails load_config_initializer event is instrumented' do
+ app_file 'config/initializers/foo.rb', ''
+
+ events = []
+ callback = -> (*_) { events << _ }
+ ActiveSupport::Notifications.subscribed(callback, 'load_config_initializer.railties') do
+ app
+ end
+
+ assert_equal %w[load_config_initializer.railties], events.map(&:first)
+ assert_includes events.first.last[:initializer], 'config/initializers/foo.rb'
+ end
end
end

0 comments on commit 251923c

Please sign in to comment.