Class: ActiveRecord::Db::Metrics::Collector
- Inherits:
-
Object
- Object
- ActiveRecord::Db::Metrics::Collector
- Defined in:
- lib/activerecord/db/metrics/collector.rb
Overview
Collects and tracks database operation metrics during a request lifecycle
Constant Summary collapse
- CRUD_KEYWORDS =
%w[INSERT UPDATE DELETE SELECT].freeze
Instance Method Summary collapse
-
#initialize ⇒ Collector
constructor
A new instance of Collector.
-
#results ⇒ Hash
Get collected metrics.
-
#start_monitoring ⇒ Object
Subscribe to ActiveRecord SQL notifications.
-
#stop_monitoring ⇒ Object
Unsubscribe from ActiveRecord SQL notifications.
Constructor Details
#initialize ⇒ Collector
Returns a new instance of Collector.
10 11 12 13 14 15 |
# File 'lib/activerecord/db/metrics/collector.rb', line 10 def initialize @query_count = 0 # Track CRUD operations per table # Example: { users: { SELECT: 5, INSERT: 1 }, posts: { SELECT: 2 } } @crud_counts_by_table = Hash.new { |hash, key| hash[key] = Hash.new(0) } end |
Instance Method Details
#results ⇒ Hash
Get collected metrics
29 30 31 32 33 34 |
# File 'lib/activerecord/db/metrics/collector.rb', line 29 def results { total_queries: @query_count, crud_operations_by_table: @crud_counts_by_table } end |
#start_monitoring ⇒ Object
Subscribe to ActiveRecord SQL notifications
18 19 20 |
# File 'lib/activerecord/db/metrics/collector.rb', line 18 def start_monitoring @subscriber = ActiveSupport::Notifications.subscribe('sql.active_record', log_subscriber) end |
#stop_monitoring ⇒ Object
Unsubscribe from ActiveRecord SQL notifications
23 24 25 |
# File 'lib/activerecord/db/metrics/collector.rb', line 23 def stop_monitoring ActiveSupport::Notifications.unsubscribe(@subscriber) if @subscriber end |