require 'agent/handler/tracker_handler' module ManageEngine module Instrumentation class RailsFramework def present? defined?(::Rails) && defined?(::ActionController) end def version Rails::VERSION::STRING end def env if Rails::VERSION::MAJOR >= 3 ::Rails.env else RAILS_ENV.dup end end def name 'Rails' end def instrument @obj = ManageEngine::APMObjectHolder.instance @obj.log.info "Instrumenting ActionController.. Rails Version: #{version}" ActiveSupport::Notifications.subscribe('start_processing.action_controller') do |name, start, finish, id, payload| result = payload[:path].partition("?") railsTracker = ManageEngine::Tracker::RootTracker.new("#{payload[:controller]}.#{payload[:action]}", start.to_f * 1000) railsTracker.url=(result[0]) railsTracker.queryString(result[2]) # even if value not available empty string will be returned railsTracker.http_method(payload[:method]) railsTracker.http_params(payload[:params]) railsTracker = ManageEngine::Agent::TrackerHandler.invokeTracker(railsTracker) Thread.current[:railsTracker] = railsTracker end # subscribe ActiveSupport::Notifications.subscribe('process_action.action_controller') do |name, start, finish, id, payload| begin railsTracker = Thread.current[:railsTracker] if (railsTracker != nil) railsTracker.finish(finish.to_f * 1000) railsTracker.setStatus(payload[:status]) exception = payload[:exception_object] if exception != nil railsTracker.setError(exception) end ManageEngine::Agent::TrackerHandler.exitTracker(railsTracker) end rescue Exception=>e @obj.log.logException("Unable to process controller event #{name}. Exception: " ,e) end end end # def instrument end end end