Module: Bulletproof::Runtime::ModelLoadCollector
- Defined in:
- lib/bulletproof/runtime/model_load_collector.rb
Overview
リクエスト中に ActiveRecord の instantiation.active_record イベントを購読し、 モデルごとのロード件数とロード発生箇所を集計する。
スレッドローカル変数を使うため、Puma 等のマルチスレッドサーバーでも 並列リクエスト間で集計が混線しない。
同一モデルが複数回ロードされた場合は件数を合算し、ロード箇所は初回を記録する。
Constant Summary collapse
- BATCH_PATH_PATTERN =
ActiveSupport::Notifications のコールバック形式 (name, start, finish, id, payload) ActiveRecord の find_each / in_batches 経由かどうかを判定するパス
%r{activerecord.*/relation/batches}
Class Method Summary collapse
-
.collect(&block) ⇒ Object
ブロック実行中のイベントを収集し、ModelLoadEvent の配列を返す(件数降順).
Class Method Details
.collect(&block) ⇒ Object
ブロック実行中のイベントを収集し、ModelLoadEvent の配列を返す(件数降順)
17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/bulletproof/runtime/model_load_collector.rb', line 17 def self.collect(&block) Thread.current[THREAD_KEY] = {} ActiveSupport::Notifications.subscribed( method(:handle_event), "instantiation.active_record", &block ) build_events(Thread.current[THREAD_KEY]) ensure Thread.current[THREAD_KEY] = nil end |