Module: HeapScope::Rails
- Defined in:
- lib/heapscope/rails.rb
Overview
Optional Rails helpers. Loaded explicitly: require "heapscope/rails"
Class Method Summary collapse
- .activerecord_population ⇒ Object
- .install_middleware!(sample_rate: 0.01) ⇒ Object
- .measure_action(controller:, action:, force_gc: true, &block) ⇒ Object
- .request_retention(label: "request", cycles: 10, force_gc: true, &block) ⇒ Object
- .warn_if_autoloading! ⇒ Object
Class Method Details
.activerecord_population ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/heapscope/rails.rb', line 41 def activerecord_population return {} unless defined?(::ActiveRecord::Base) counts = {} ObjectSpace.each_object(Class) do |klass| next unless klass < ::ActiveRecord::Base next if klass.abstract_class? counts[klass.name] = ObjectSpace.each_object(klass).count rescue StandardError next end counts rescue StandardError {} end |
.install_middleware!(sample_rate: 0.01) ⇒ Object
8 9 10 11 12 13 14 15 |
# File 'lib/heapscope/rails.rb', line 8 def install_middleware!(sample_rate: 0.01) raise CapabilityError, "Rails is not loaded" unless defined?(::Rails) ::Rails.application.config.middleware.use( HeapScope::Middleware, sample_rate: sample_rate ) end |
.measure_action(controller:, action:, force_gc: true, &block) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/heapscope/rails.rb', line 27 def measure_action(controller:, action:, force_gc: true, &block) raise ArgumentError, "block required" unless block_given? HeapScope.measure( force_gc: force_gc, metadata: { kind: "rails_action", controller: controller.to_s, action: action.to_s, label: "#{controller}##{action}" }, &block ) end |
.request_retention(label: "request", cycles: 10, force_gc: true, &block) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/heapscope/rails.rb', line 17 def request_retention(label: "request", cycles: 10, force_gc: true, &block) raise ArgumentError, "block required" unless block_given? HeapScope.retention_test( cycles: cycles, force_gc: force_gc, metadata: { kind: "rails_request", label: label }, &block ) end |
.warn_if_autoloading! ⇒ Object
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/heapscope/rails.rb', line 58 def warn_if_autoloading! return unless defined?(::Rails) return unless ::Rails.respond_to?(:application) return unless ::Rails.env.development? HeapScope.config.log( :verbose, "Rails development autoloading can distort heap growth. Prefer warmups or cache_classes for experiments." ) end |