class ScoutApm::MetricSet

Constants

PASSTHROUGH_METRICS

We can't aggregate a handful of things like samplers (CPU, Memory), or Controller, and Percentiles so pass through these metrics directly

TODO: Figure out a way to not have this duplicate what's in Samplers, and also on server's ingest

Attributes

metrics[R]

Public Class Methods

new() click to toggle source
# File lib/scout_apm/metric_set.rb, line 11
def initialize
  @metrics = Hash.new
end

Public Instance Methods

==(other)
Alias for: eql?
absorb(metric) click to toggle source

Absorbs a single new metric into the aggregates

# File lib/scout_apm/metric_set.rb, line 20
def absorb(metric)
  meta, stat = metric

  if PASSTHROUGH_METRICS.include?(meta.type) # Leave as-is, don't attempt to combine into an /all key
    @metrics[meta] ||= MetricStats.new
    @metrics[meta].combine!(stat)

  elsif meta.type == "Errors" # Sadly special cased, we want both raw and aggregate values
    # When combining MetricSets between different
      @metrics[meta] ||= MetricStats.new
      @metrics[meta].combine!(stat)

    if !@combine_in_progress
      agg_meta = MetricMeta.new("Errors/Request", :scope => meta.scope)
      @metrics[agg_meta] ||= MetricStats.new
      @metrics[agg_meta].combine!(stat)
    end

  else # Combine down to a single /all key
    agg_meta = MetricMeta.new("#{meta.type}/all", :scope => meta.scope)
    @metrics[agg_meta] ||= MetricStats.new
    @metrics[agg_meta].combine!(stat)
  end
end
absorb_all(metrics) click to toggle source
# File lib/scout_apm/metric_set.rb, line 15
def absorb_all(metrics)
  Array(metrics).each { |m| absorb(m) }
end
combine!(other) click to toggle source

Sets a combine_in_progress flag to prevent double-counting Error metrics. Without it, the Errors/Request number would be increasingly off as metric_sets get merged in.

# File lib/scout_apm/metric_set.rb, line 48
def combine!(other)
  @combine_in_progress = true
  absorb_all(other.metrics)
  @combine_in_progress = false
  self
end
eql?(other) click to toggle source
# File lib/scout_apm/metric_set.rb, line 56
def eql?(other)
  metrics == other.metrics
end
Also aliased as: ==