elastic / apm-agent-ruby

https://www.elastic.co/solutions/apm
Apache License 2.0
168 stars 131 forks source link

Conflicting with others ActiveSupport::Notifications.instrument #767

Closed henriquekraemer closed 4 years ago

henriquekraemer commented 4 years ago

Describe the bug

Conflicting with others ActiveSupport::Notifications.instrument.

I have an module called CalculationPreload that I use for caclulate some data from a group of records, instead of doing one by one.

module CalculationPreload
  module Relation
    def exec_queries
      super

      klass.execute_calculation_preloads!(calculation_preloads_data, @records) if has_calculation_preloads? && calculation_preloads_data.empty? == false

      @records
    end

    def calculation_preload *args
      calculation_preloads_data.push *args

      spawn
    end

    def has_calculation_preloads?
      calculation_preloads_data.any?
    end

    def calculation_preloads_data
      @_relation_calculation_preloads ||= []
    end
  end

  module Base
    extend ActiveSupport::Concern

    module ClassMethods
      def execute_calculation_preloads! target_attrs, record_set
        target_attrs = calculation_preloads_data.slice(*target_attrs)

        ActiveSupport::Notifications.instrument('sql.active_record', name: "#{self.name} Calculation Preloads") do
          target_attrs.each do |target_attr, target_block|

            ActiveSupport::Notifications.instrument('sql.active_record', name: "#{self.name}##{target_attr.to_s.camelize} Calculation Preload") do
              target_block.call(record_set)
            end
          end
        end
      end

      def execute_calculation_preload target_attr, record_set
        calculation_preloads_data[target_attr].call(target_attr, record_set)
      end

      def calculation_preload target_attr, &block
        raise 'no block given' unless block_given?

        calculation_preloads_data[target_attr.to_sym] = block
      end

      def has_calculation_preloads?
        calculation_preloads_data.any?
      end

      def calculation_preloads_data
        @_base_calculation_preloads ||= {}
      end
    end
  end
end

Every time that I call execute_calculation_preloads, this error occurs:

Exception message: no implicit conversion of nil into String

Error line: ActiveSupport::Notifications.instrument('sql.active_record', name: "#{self.name} Calculation Preloads") do

Backtrace:

/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/tokenizer.rb:19:in `initialize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/tokenizer.rb:19:in `new'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/tokenizer.rb:19:in `initialize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/signature.rb:23:in `new'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/signature.rb:23:in `initialize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/signature.rb:40:in `new'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/signature.rb:40:in `parse'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/sql/signature.rb:17:in `summarize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/normalizers/rails/active_record.rb:50:in `summarize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/normalizers/rails/active_record.rb:28:in `normalize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/normalizers.rb:57:in `normalize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/subscriber.rb:34:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:98:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:42:in `block in start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:42:in `each'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:42:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/instrumenter.rb:31:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/instrumenter.rb:18:in `instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications.rb:164:in `instrument'
/home/henriquekraemer/wertsolutions/projects/m-v4/lib/calculation_preload.rb:48:in `execute_calculation_preloads!'
/home/henriquekraemer/wertsolutions/projects/m-v4/lib/calculation_preload.rb:13:in `exec_queries'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/relation.rb:515:in `load'

/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/relation.rb:243:in `to_a'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/relation/delegation.rb:46:in `map'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:79:in `_serializable_array'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:73:in `serializable_array'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:49:in `as_json'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/json/encoding.rb:35:in `encode'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/json/encoding.rb:22:in `encode'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/core_ext/object/json.rb:37:in `to_json_with_active_support_encoder'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:63:in `to_json'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:114:in `block in <module:Renderers>'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/action_controller/serialization.rb:48:in `block (2 levels) in <module:Serialization>'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:45:in `block in _render_to_body_with_renderer'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/set.rb:306:in `each_key'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/set.rb:306:in `each'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:41:in `_render_to_body_with_renderer'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:37:in `render_to_body'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/rendering.rb:25:in `render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rendering.rb:16:in `render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/benchmark.rb:308:in `realtime'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/core_ext/benchmark.rb:12:in `ms'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:44:in `block in render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:43:in `render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/wicked_pdf-1.4.0/lib/wicked_pdf/pdf_helper.rb:46:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/wicked_pdf-1.4.0/lib/wicked_pdf/pdf_helper.rb:46:in `render_with_wicked_pdf'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/wicked_pdf-1.4.0/lib/wicked_pdf/pdf_helper.rb:30:in `render'
/home/henriquekraemer/wertsolutions/projects/m-v4/app/controllers/api/v1/maint_orders_controller.rb:111:in `index'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/base.rb:198:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rendering.rb:10:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:117:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:505:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'

/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/sentry-raven-2.13.0/lib/raven/integrations/rails/controller_transaction.rb:7:in `block in included'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:441:in `instance_exec'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:441:in `block in make_lambda'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:312:in `block in halting'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:497:in `block in around'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:505:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/callbacks.rb:19:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rescue.rb:29:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications.rb:164:in `block in instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications.rb:164:in `instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/base.rb:137:in `process'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionview-4.2.11.1/lib/action_view/rendering.rb:30:in `process'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal.rb:196:in `dispatch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal.rb:237:in `block in action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/routing/route_set.rb:43:in `serve'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/journey/router.rb:43:in `block in serve'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/journey/router.rb:30:in `each'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/journey/router.rb:30:in `serve'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/routing/route_set.rb:817:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-throttle-0.7.0/lib/rack/throttle/limiter.rb:35:in `call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `block in call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/adapters/abstract_adapter.rb:85:in `switch'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/forwardable.rb:202:in `switch'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/status-0.0.1/lib/status/middleware.rb:11:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/warden-1.2.7/lib/warden/manager.rb:36:in `block in call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/warden-1.2.7/lib/warden/manager.rb:35:in `catch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/warden-1.2.7/lib/warden/manager.rb:35:in `call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `block in call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/adapters/abstract_adapter.rb:85:in `switch'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/forwardable.rb:202:in `switch'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/etag.rb:24:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/conditionalget.rb:25:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/head.rb:13:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/params_parser.rb:27:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/flash.rb:260:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/session/abstract/id.rb:252:in `context'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/session/abstract/id.rb:247:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/cookies.rb:560:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/query_cache.rb:36:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:88:in `__run_callbacks__'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/lograge-0.11.2/lib/lograge/rails_ext/rack/logger.rb:15:in `call_app'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/rack/logger.rb:20:in `block in call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/tagged_logging.rb:68:in `block in tagged'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/tagged_logging.rb:26:in `tagged'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/tagged_logging.rb:68:in `tagged'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/rack/logger.r
b:20:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/request_store-1.5.0/lib/request_store/middleware.rb:19:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/request_id.rb:21:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/methodoverride.rb:22:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/runtime.rb:18:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/sendfile.rb:113:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-cors-1.0.3/lib/rack/cors.rb:95:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.6.0/lib/elastic_apm/middleware.rb:19:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/sentry-raven-2.13.0/lib/raven/integrations/rack.rb:51:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/engine.rb:518:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/application.rb:165:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:149:in `accept_and_process_next_request'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/request_handler.rb:415:in `block (3 levels) in start_threads'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'

Environment

Additional context

I have tested with older versions of ElasticAPM gem (3.3, 3.4 and 3.5), and the error was different:

Exception message: undefined method `encode' for nil:NilClass

Error line: ActiveSupport::Notifications.instrument('sql.active_record', name: "#{self.name} Calculation Preloads") do

Backtrace:

/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.5.0/lib/elastic_apm/sql_summarizer.rb:27:in `summarize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.5.0/lib/elastic_apm/normalizers/rails/active_record.rb:50:in `summarize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.5.0/lib/elastic_apm/normalizers/rails/active_record.rb:28:in `normalize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.5.0/lib/elastic_apm/normalizers.rb:57:in `normalize'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.5.0/lib/elastic_apm/subscriber.rb:34:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:98:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:42:in `block in start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:42:in `each'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/fanout.rb:42:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/instrumenter.rb:31:in `start'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/instrumenter.rb:18:in `instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications.rb:164:in `instrument'
/home/henriquekraemer/wertsolutions/projects/m-v4/lib/calculation_preload.rb:48:in `execute_calculation_preloads!'
/home/henriquekraemer/wertsolutions/projects/m-v4/lib/calculation_preload.rb:13:in `exec_queries'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/relation.rb:515:in `load'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/relation.rb:243:in `to_a'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/relation/delegation.rb:46:in `map'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:79:in `_serializable_array'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:73:in `serializable_array'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:49:in `as_json'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/json/encoding.rb:35:in `encode'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/json/encoding.rb:22:in `encode'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/core_ext/object/json.rb:37:in `to_json_with_active_support_encoder'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/active_model/array_serializer.rb:63:in `to_json'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:114:in `block in <module:Renderers>'

/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/active_model_serializers-0.8.3/lib/action_controller/serialization.rb:48:in `block (2 levels) in <module:Serialization>'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:45:in `block in _render_to_body_with_renderer'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/set.rb:306:in `each_key'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/set.rb:306:in `each'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:41:in `_render_to_body_with_renderer'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/renderers.rb:37:in `render_to_body'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/rendering.rb:25:in `render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rendering.rb:16:in `render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/benchmark.rb:308:in `realtime'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/core_ext/benchmark.rb:12:in `ms'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:44:in `block in render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:43:in `render'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/wicked_pdf-1.4.0/lib/wicked_pdf/pdf_helper.rb:46:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/wicked_pdf-1.4.0/lib/wicked_pdf/pdf_helper.rb:46:in `render_with_wicked_pdf'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/wicked_pdf-1.4.0/lib/wicked_pdf/pdf_helper.rb:30:in `render'
/home/henriquekraemer/wertsolutions/projects/m-v4/app/controllers/api/v1/maint_orders_controller.rb:111:in `index'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/base.rb:198:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rendering.rb:10:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:117:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:505:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/sentry-raven-2.13.0/lib/raven/integrations/rails/controller_transaction.rb:7:in `block in included'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:441:in `instance_exec'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:441:in `block in make_lambda'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:312:in `block in halting'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:497:in `block in around'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:505:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/callbacks.rb:19:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rescue.rb:29:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications.rb:164:in `block in instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/notifications.rb:164:in `instrument'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/abstract_controller/base.rb:137:in `process'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionview-4.2.11.1/lib/action_view/rendering.rb:30:in `process'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal.rb:196:in `dispatch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_controller/metal.rb:237:in `block in action'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/routing/route_set.rb:43:in `serve'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/journey/router.rb:43:in `block in serve'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/journey/router.rb:30:in `each'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/journey/router.rb:30:in `serve'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/routing/route_set.rb:817:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-throttle-0.7.0/lib/rack/throttle/limiter.rb:35:in `call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `block in call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/adapters/abstract_adapter.rb:85:in `switch'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/forwardable.rb:202:in `switch'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/status-0.0.1/lib/status/middleware.rb:11:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/warden-1.2.7/lib/warden/manager.rb:36:in `block in call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/warden-1.2.7/lib/warden/manager.rb:35:in `catch'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/warden-1.2.7/lib/warden/manager.rb:35:in `call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `block in call'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/adapters/abstract_adapter.rb:85:in `switch'
/home/henriquekraemer/.rvm/rubies/ruby-2.3.8/lib/ruby/2.3.0/forwardable.rb:202:in `switch'
/home/henriquekraemer/wertsolutions/projects/m-v4/local_gems/apartment/lib/apartment/elevators/generic.rb:21:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/etag.rb:24:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/conditionalget.rb:25:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/head.rb:13:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/params_parser.rb:27:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/flash.rb:260:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/session/abstract/id.rb:252:in `context'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/session/abstract/id.rb:247:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/cookies.rb:560:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/query_cache.rb:36:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activerecord-4.2.11.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:88:in `__run_callbacks__'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/lograge-0.11.2/lib/lograge/rails_ext/rack/logger.rb:15:in `call_app'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/rack/logger.rb:20:in `block in call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/tagged_logging.rb:68:in `block in tagged'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/tagged_logging.rb:26:in `tagged'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/tagged_logging.rb:68:in `tagged'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/rack/logger.rb:20:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/request_store-1.5.0/lib/request_store/middleware.rb:19:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/actionpack-4.2.11.1/lib/action_dispatch/middleware/request_id.rb:21:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/methodoverride.rb:22:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/runtime.rb:18:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/activesupport-4.2.11.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-1.6.13/lib/rack/sendfile.rb:113:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/rack-cors-1.0.3/lib/rack/cors.rb:95:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/elastic-apm-3.5.0/lib/elastic_apm/middleware.rb:19:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/sentry-raven-2.13.0/lib/raven/integrations/rack.rb:51:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/engine.rb:518:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/railties-4.2.11.1/lib/rails/application.rb:165:in `call'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:149:in `accept_and_process_next_request'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/request_handler.rb:415:in `block (3 levels) in start_threads'
/home/henriquekraemer/.rvm/gems/ruby-2.3.8/gems/passenger-6.0.4/src/ruby_supportlib/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'
estolfo commented 4 years ago

Hi @HenriqueKraemer! Thanks for reporting this error. I’m curious if there’s a reason you want to re-instrument the existing sql.active_record event that Rails already instruments? Do you subscribe to this event somewhere else in your codebase and therefore would like specific event information? If you’re trying to create your own custom event, you could use a different name (reference here - "11 Creating custom events") The reason you are seeing this error is because Rails already instruments sql.active_record and provides a payload object that it expected by our Subscriber. You can see the keys of the payload object here in the Rails codebase (for 4.2.11.1) and we expect that payload to be passed to our Subscriber. Let us know what exactly you are trying to accomplish so we can help further. Thanks!

henriquekraemer commented 4 years ago

@estolfo, sorry for the delay. Here is an example of usage:

class MaintOrder < ActiveRecord::Base
  include MaintOrder::CalculationPreloads
  ...
end
module MaintOrder::CalculationPreloads
  extend ActiveSupport::Concern

  included do
    include CalculationPreload::Base

    attr_writer :total_resources_usage

    calculation_preload :total_resources_usage do |records|
      record_ids = records.collect(&:id)

      result = MaintOrderResourcesUsage.where(maint_order_id: record_ids).group(:maint_order_id).sum(:total_cost)

      records.each do |record|
        record.total_resources_usage = result[record.id].try(:round, 2) || 0.0
      end
    end
end
module Api
  module V1
    class MaintOrdersController < ApplicationController
      def index
        ...

        render json: do_preloads(apply_pagination(@maint_orders)), meta: meta_hash, root: 'data'
      end

      def do_preloads query
        ...

        # CalculationPreload
        preload_calculations = %i[total_resources_usage]

        query = query.calculation_preload(*preload_calculations)
        query = query.preload(*preload_associations)

        query
      end
    end
  end
end

This is an old module that was created for calculate data once, not after every query execution. Before this module, a lot of calculations were made in the models with attr_accessors.

So, in my front end I can say that I want this data with total_resources_usage then this data is calculated.

estolfo commented 4 years ago

Hi @HenriqueKraemer Thanks for this extra information. From what I can tell (please correct me if I'm wrong), the actual query that happens within the execute_calculation_preloads! method is a sql query. That query would be instrumented anyway by the APM agent or any other library subscribed to 'sql.active_record'. The only reason to use ActiveSupport::Notifications.instrument would be to create your own custom events that you subscribe to somewhere else in your codebase. Perhaps I'm missing it, but can you tell me why you're re-instrumenting events with ActiveSupport::Notifications.instrument('sql.active_record'...? This will just redefine the API that ActiveRecord uses for that sql event, potentially causing this same error in other libraries that subscribe to 'sql.active_record'.

henriquekraemer commented 4 years ago

Hi, I managed to make it work sending the other payload fields.

Ill talk to the team on how to improve this approach for calculate stuff. This is an old part of the code and its a mess...

Thanks for the support!