Class: ScoutApm::MetricSet
- Inherits:
-
Object
- Object
- ScoutApm::MetricSet
- Defined in:
- lib/scout_apm/metric_set.rb
Constant Summary collapse
- PASSTHROUGH_METRICS =
We can’t aggregate CPU, Memory, Capacity, or Controller, 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
["CPU", "Memory", "Instance", "Controller", "SlowTransaction", "Percentile", "Job"]
Instance Attribute Summary collapse
-
#metrics ⇒ Object
readonly
Returns the value of attribute metrics.
Instance Method Summary collapse
-
#absorb(metric) ⇒ Object
Absorbs a single new metric into the aggregates.
- #absorb_all(metrics) ⇒ Object
-
#combine!(other) ⇒ Object
Sets a combine_in_progress flag to prevent double-counting Error metrics.
-
#initialize ⇒ MetricSet
constructor
A new instance of MetricSet.
Constructor Details
#initialize ⇒ MetricSet
Returns a new instance of MetricSet.
9 10 11 |
# File 'lib/scout_apm/metric_set.rb', line 9 def initialize @metrics = Hash.new end |
Instance Attribute Details
#metrics ⇒ Object (readonly)
Returns the value of attribute metrics.
7 8 9 |
# File 'lib/scout_apm/metric_set.rb', line 7 def metrics @metrics end |
Instance Method Details
#absorb(metric) ⇒ Object
Absorbs a single new metric into the aggregates
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/scout_apm/metric_set.rb', line 18 def absorb(metric) , stat = metric if PASSTHROUGH_METRICS.include?(.type) # Leave as-is, don't attempt to combine into an /all key @metrics[] ||= MetricStats.new @metrics[].combine!(stat) elsif .type == "Errors" # Sadly special cased, we want both raw and aggregate values # When combining MetricSets between different @metrics[] ||= MetricStats.new @metrics[].combine!(stat) if !@combine_in_progress = MetricMeta.new("Errors/Request", :scope => .scope) @metrics[] ||= MetricStats.new @metrics[].combine!(stat) end else # Combine down to a single /all key = MetricMeta.new("#{.type}/all", :scope => .scope) @metrics[] ||= MetricStats.new @metrics[].combine!(stat) end end |
#absorb_all(metrics) ⇒ Object
13 14 15 |
# File 'lib/scout_apm/metric_set.rb', line 13 def absorb_all(metrics) Array(metrics).each { |m| absorb(m) } end |
#combine!(other) ⇒ Object
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.
46 47 48 49 50 51 |
# File 'lib/scout_apm/metric_set.rb', line 46 def combine!(other) @combine_in_progress = true absorb_all(other.metrics) @combine_in_progress = false self end |