class Sentry::Metrics::LocalAggregator
def add(key, value)
def add(key, value) if @buckets[key] @buckets[key].add(value) else @buckets[key] = GaugeMetric.new(value) end end
def deserialize_tags(tags)
def deserialize_tags(tags) tags.inject({}) do |h, tag| k, v = tag old = h[k] # make it an array if key repeats h[k] = old ? (old.is_a?(Array) ? old << v : [old, v]) : v h end end
def initialize
def initialize @buckets = {} end
def to_hash
def to_hash return nil if @buckets.empty? @buckets.map do |bucket_key, metric| type, key, unit, tags = bucket_key payload_key = "#{type}:#{key}@#{unit}" payload_value = { tags: deserialize_tags(tags), min: metric.min, max: metric.max, count: metric.count, sum: metric.sum } [payload_key, payload_value] end.to_h end