Sha256: 55f3fdfbf67e22cfbcf78be29b0d30df48d971792165730c8983aed318009331

Contents?: true

Size: 1.38 KB

Versions: 5

Compression:

Stored size: 1.38 KB

Contents

module NewRelic::Agent::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 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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
newrelic_rpm-2.9.9 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.9.8 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.9.6 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.9.5 lib/new_relic/agent/samplers/cpu_sampler.rb
newrelic_rpm-2.9.4 lib/new_relic/agent/samplers/cpu_sampler.rb