Sha256: e41f7fbca83e98decca2710ab3623b0c4d27650b859d5e919b4d8f2e50aee722

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

require 'new_relic/agent/method_tracer'

DependencyDetection.defer do
  @name = :rake

  depends_on do
    defined?(::Rake) and not ::NewRelic::Control.instance['disable_rake']
  end

  executes do
    ::NewRelic::Agent.logger.info 'Installing Rake instrumentation'
  end

  executes do
    ::Rake::Task.class_eval do
      include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation

      alias_method :origin_execute, :execute
      def execute(args=nil)
        if ignore_metric_reporting?
          origin_execute(args)
        else
          execute_with_newrelic_trace(args)
        end
      end

      # Make sure NewRelic agent flush data to the server according to
      # https://newrelic.com/docs/ruby/monitoring-ruby-background-processes-and-daemons
      # even though Agent configuration is :send_data_on_exit => true
      at_exit { NewRelic::Agent.shutdown }

      def execute_with_newrelic_trace(args)
        unless ::NewRelic::Rake.started?
          ::NewRelic::Agent.manual_start(:dispatcher => :rake)
          ::NewRelic::Rake.started = true
        end
        perform_action_with_newrelic_trace(:name => self.name, :category => "OtherTransaction/Rake") do
          origin_execute(args)
        end
      end

      def ignore_metric_reporting?
        self.name == 'jobs:work'
      end
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
newrelic-rake-1.3.1 lib/newrelic-rake/instrument.rb