Sha256: 878ad7dfc1943d16c1096c269981d53c2d71b179bb2c930980d039579e023717

Contents?: true

Size: 1.47 KB

Versions: 12

Compression:

Stored size: 1.47 KB

Contents

module NewRelic
  module Agent
    module Samplers
  class CpuSampler < NewRelic::Agent::Sampler
    attr_reader :last_time
    def initialize
      super :cpu
      poll
    end

    def user_util_stats
      stats_engine.get_stats_no_scope("CPU/User/Utilization")
    end
    def system_util_stats
      stats_engine.get_stats_no_scope("CPU/System/Utilization")
    end
    def usertime_stats
      stats_engine.get_stats_no_scope("CPU/User Time")
    end
    def systemtime_stats
      stats_engine.get_stats_no_scope("CPU/System Time")
    end

    def self.supported_on_this_platform?
      not defined?(JRuby)
    end

    def poll
      now = Time.now
      t = Process.times
      if @last_time
        elapsed = now - @last_time
        return if elapsed < 1 # Causing some kind of math underflow
        num_processors = NewRelic::Control.instance.local_env.processors || 1
        usertime = t.utime - @last_utime
        systemtime = t.stime - @last_stime

        systemtime_stats.record_data_point(systemtime) if systemtime >= 0
        usertime_stats.record_data_point(usertime) if usertime >= 0

        # Calculate the true utilization by taking cpu times and dividing by
        # elapsed time X num_processors.
        user_util_stats.record_data_point usertime / (elapsed * num_processors)
        system_util_stats.record_data_point systemtime / (elapsed * num_processors)
      end
      @last_utime = t.utime
      @last_stime = t.stime
      @last_time = now
    end
  end
end
end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
newrelic_rpm-2.13.4.rum6 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.4.rum5 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.4.rum4 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.4.eum3 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.4.eum2 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.4.eum1 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.4 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.3 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.3.beta lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.2 lib/new_relic/agent/samplers/cpu_sampler.rb
honkster-newrelic_rpm-2.13.1 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.13.1 lib/new_relic/agent/samplers/cpu_sampler.rb