Spree API和New Relic监控

时间:2014-03-08 18:17:27

标签: ruby-on-rails spree newrelic

我在使用New Relic监控我的应用时遇到了问题。

我有最新的Spree引擎安装在我的路由中,并拥有控制器作为root。

出于某种原因,New Relic只收集来自此根路由的数据,任何对Spree JSON API的调用都会被忽略,并且不会显示在Dashboard中,因此我只能看到一个事务而且它没用。

有没有办法在整个安装的应用上启用监控?我错过了什么吗?

3 个答案:

答案 0 :(得分:6)

只要您在Rails 4.0或更高版本上运行,将以下内容添加到app/controllers/spree/api/base_controller_decorator.rb或某个等效位置就可以连接仪器:

class Spree::Api::BaseController
  include ActionController::Instrumentation
end

这是有效的,因为在Rails 4.0及更高版本中,New Relic的控制器工具基于ActiveSupport::Notifications,而include ActionController::Instrumentation可以使这些事件流动。

答案 1 :(得分:1)

我的猜测是这种情况正在发生,因为Spree的API继承自ActionController::Metal,NewRelic没有挂钩。

点击此处:https://github.com/spree/spree/blob/6ac62c32f91e6626b338564aab7a7ad570cbd4c3/api/app/controllers/spree/api/base_controller.rb#L5

这可能是一个很好的理由,可以在Spree中切换出来,所以请为此提交一个问题。

答案 2 :(得分:1)

我找到了一种绕过this article中的问题的方法。

使用以下代码创建app / controllers / spree / api / base_controller_decorator.rb:

require 'new_relic/agent/instrumentation/action_controller_subscriber'
require 'new_relic/agent/instrumentation/rails4/action_controller'

Spree::Api::BaseController.class_eval do
  before_filter :check_for_user

  include NewRelic::Agent::Instrumentation::ControllerInstrumentation
  include NewRelic::Agent::Instrumentation::Rails4::ActionController

  NewRelic::Agent::Instrumentation::ActionControllerSubscriber \
    .subscribe(/^process_action.action_controller$/)

end