class Airbrake::Stat
Stat
is a data structure that allows accumulating performance data (route performance, SQL query performance and such). It's powered by TDigests.
Usually, one Stat
corresponds to one resource (route or query, etc.). Incrementing a stat means pushing new performance statistics.
@example
stat = Airbrake::Stat.new stat.increment(Time.now - 200) stat.to_h # Pack and serialize data so it can be transmitted.
@since v3.2.0
Attributes
Public Class Methods
@param [Integer] count How many times this stat was incremented @param [Float] sum The sum of duration in milliseconds @param [Float] sumsq The squared sum of duration in milliseconds @param [TDigest::TDigest] tdigest Packed durations. By default,
compression is 20
# File lib/airbrake-ruby/stat.rb, line 24 def initialize(count: 0, sum: 0.0, sumsq: 0.0, tdigest: TDigest.new(0.05)) @count = count @sum = sum @sumsq = sumsq @tdigest = tdigest end
Public Instance Methods
Increments count and updates performance with the difference of end_time
and start_time
.
@param [Date] start_time @param [Date] end_time @return [void]
# File lib/airbrake-ruby/stat.rb, line 49 def increment(start_time, end_time = nil) end_time ||= Time.new increment_ms((end_time - start_time) * 1000) end
Increments count and updates performance with given ms
value.
@param [Float] ms @return [void]
# File lib/airbrake-ruby/stat.rb, line 58 def increment_ms(ms) self.count += 1 self.sum += ms self.sumsq += ms * ms tdigest.push(ms) end
We define custom inspect so that we weed out uninformative TDigest
, which is also very slow to dump when we log Airbrake::Stat
.
@return [String]
# File lib/airbrake-ruby/stat.rb, line 71 def inspect "#<struct Airbrake::Stat count=#{count}, sum=#{sum}, sumsq=#{sumsq}>" end
@return [Hash{String=>Object}] stats as a hash with compressed TDigest
(serialized as base64)
# File lib/airbrake-ruby/stat.rb, line 33 def to_h tdigest.compress! { 'count' => count, 'sum' => sum, 'sumsq' => sumsq, 'tdigest' => Base64.strict_encode64(tdigest.as_small_bytes), } end