Method: ScoutApm::Instruments::Process::ProcessCpu#run
- Defined in:
- lib/scout_apm/instruments/process/process_cpu.rb
#run ⇒ Object
TODO: Figure out a good default instead of nil
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/scout_apm/instruments/process/process_cpu.rb', line 46 def run res = nil t = ::Process.times now = Time.now utime = t.utime stime = t.stime wall_clock_elapsed = now - last_run if wall_clock_elapsed < 0 save_times(now, utime, stime) logger.info "#{human_name}: Negative time elapsed. now: #{now}, last_run: #{last_run}, total time: #{wall_clock_elapsed}." return nil end utime_elapsed = utime - last_utime stime_elapsed = stime - last_stime process_elapsed = utime_elapsed + stime_elapsed # This can happen right after a fork. This class starts up in # pre-fork, records {u,s}time, then forks. This resets {u,s}time to 0 if process_elapsed < 0 save_times(now, utime, stime) logger.debug "#{human_name}: Negative process time elapsed. utime: #{utime_elapsed}, stime: #{stime_elapsed}, total time: #{process_elapsed}. This is normal to see when starting a forking web server." return nil end # Normalized to # of processors normalized_wall_clock_elapsed = wall_clock_elapsed * num_processors # If somehow we run for 0 seconds between calls, don't try to divide by 0 res = if normalized_wall_clock_elapsed == 0 0 else ( process_elapsed / normalized_wall_clock_elapsed )*100 end if res < 0 save_times(now, utime, stime) logger.info "#{human_name}: Negative CPU. #{process_elapsed} / #{normalized_wall_clock_elapsed} * 100 ==> #{res}" return nil end save_times(now, utime, stime) logger.debug "#{human_name}: #{res.inspect} [#{num_processors} CPU(s)]" return res end |