class NewRelic::Agent::Stats

Attributes

apdex_f[RW]
apdex_s[RW]
apdex_t[RW]
call_count[RW]
max_call_time[RW]
min_call_time[RW]
sum_of_squares[RW]
total_call_time[RW]
total_exclusive_time[RW]

Public Class Methods

new() click to toggle source
# File lib/new_relic/agent/stats.rb, line 13
def initialize
  reset
end

Public Instance Methods

==(other) click to toggle source
# File lib/new_relic/agent/stats.rb, line 106
def ==(other)
  other.class == self.class &&
  (
    @min_call_time        == other.min_call_time &&
    @max_call_time        == other.max_call_time &&
    @total_call_time      == other.total_call_time &&
    @total_exclusive_time == other.total_exclusive_time &&
    @sum_of_squares       == other.sum_of_squares &&
    @call_count           == other.call_count
  )
end
increment_count(value = 1) click to toggle source

increments the #call_count by one

# File lib/new_relic/agent/stats.rb, line 93
def increment_count(value = 1)
  @call_count += value
end
inspect_full() click to toggle source

Concerned about implicit usage of inspect relying on stats format, so putting back a version to get full inspection as separate method

# File lib/new_relic/agent/stats.rb, line 99
def inspect_full
  variables = instance_variables.map do |ivar|
    "#{ivar.to_s}=#{instance_variable_get(ivar).inspect}"
  end.join(" ")
  "#<NewRelic::Agent::Stats #{variables}>"
end
is_reset?() click to toggle source
# File lib/new_relic/agent/stats.rb, line 26
def is_reset?
  call_count == 0 && total_call_time == 0.0 && total_exclusive_time == 0.0
end
merge(other_stats) click to toggle source
# File lib/new_relic/agent/stats.rb, line 30
def merge(other_stats)
  stats = self.clone
  stats.merge!(other_stats)
end
merge!(other) click to toggle source
# File lib/new_relic/agent/stats.rb, line 35
def merge!(other)
  @min_call_time = other.min_call_time if min_time_less?(other)
  @max_call_time = other.max_call_time if other.max_call_time > max_call_time
  @total_call_time      += other.total_call_time
  @total_exclusive_time += other.total_exclusive_time
  @sum_of_squares       += other.sum_of_squares
  @call_count += other.call_count
  self
end
record(value=nil, aux=nil) { |self| ... } click to toggle source
# File lib/new_relic/agent/stats.rb, line 60
def record(value=nil, aux=nil, &blk)
  if blk
    yield self
  else
    case value
    when Numeric
      aux ||= value
      self.record_data_point(value, aux)
    when :apdex_s, :apdex_t, :apdex_f
      self.record_apdex(value, aux)
    when NewRelic::Agent::Stats
      self.merge!(value)
    end
  end
end
record_apdex(bucket, apdex_t) click to toggle source
# File lib/new_relic/agent/stats.rb, line 123
def record_apdex(bucket, apdex_t)
  case bucket
  when :apdex_s then @call_count += 1
  when :apdex_t then @total_call_time += 1
  when :apdex_f then @total_exclusive_time += 1
  end
  if apdex_t
    @min_call_time = apdex_t
    @max_call_time = apdex_t
  else
    ::NewRelic::Agent.logger.warn("Attempted to set apdex_t to #{apdex_t.inspect}, backtrace = #{caller.join("\n")}")
  end
end
record_data_point(value, exclusive_time = value) click to toggle source

record a single data point into the statistical gatherer. The gatherer will aggregate all data points collected over a specified period and upload its data to the NewRelic server

# File lib/new_relic/agent/stats.rb, line 79
def record_data_point(value, exclusive_time = value)
  @call_count += 1
  @total_call_time += value
  @min_call_time = value if value < @min_call_time || @call_count == 1
  @max_call_time = value if value > @max_call_time
  @total_exclusive_time += exclusive_time

  @sum_of_squares += (value * value)
  self
end
Also aliased as: trace_call
reset() click to toggle source
# File lib/new_relic/agent/stats.rb, line 17
def reset
  @call_count = 0
  @total_call_time = 0.0
  @total_exclusive_time = 0.0
  @min_call_time = 0.0
  @max_call_time = 0.0
  @sum_of_squares = 0.0
end
to_json(*_) click to toggle source
# File lib/new_relic/agent/stats.rb, line 49
def to_json(*_)
  {
    'call_count'           => call_count.to_i,
    'min_call_time'        => min_call_time.to_f,
    'max_call_time'        => max_call_time.to_f,
    'total_call_time'      => total_call_time.to_f,
    'total_exclusive_time' => total_exclusive_time.to_f,
    'sum_of_squares'       => sum_of_squares.to_f
  }.to_json(*_)
end
to_s() click to toggle source
# File lib/new_relic/agent/stats.rb, line 45
def to_s
  "[#{'%2i' % call_count.to_i} calls #{'%.4f' % total_call_time.to_f}s / #{'%.4f' % total_exclusive_time.to_f}s ex]"
end
trace_call(value, exclusive_time = value)
Alias for: record_data_point

Protected Instance Methods

min_time_less?(other) click to toggle source
# File lib/new_relic/agent/stats.rb, line 139
def min_time_less?(other)
  (other.min_call_time < min_call_time && other.call_count > 0) || call_count == 0
end