Sha256: 029a729625d7b7ebd6ed20da431c2ebe3095ba618bbc169cda5f5477f043853e
Contents?: true
Size: 1.77 KB
Versions: 1
Compression:
Stored size: 1.77 KB
Contents
# encoding: UTF-8 require 'prometheus/client/metric' module Prometheus module Client # Summary is an accumulator for samples. It captures Numeric data and # provides the total count and sum of observations. class Summary < Metric def type :summary end # Records a given value. def observe(value, labels: {}) base_label_set = label_set_for(labels) @store.synchronize do @store.increment(labels: base_label_set.merge(quantile: "count"), by: 1) @store.increment(labels: base_label_set.merge(quantile: "sum"), by: value) end end # Returns a hash with "sum" and "count" as keys def get(labels: {}) base_label_set = label_set_for(labels) internal_counters = ["count", "sum"] @store.synchronize do internal_counters.each_with_object({}) do |counter, acc| acc[counter] = @store.get(labels: base_label_set.merge(quantile: counter)) end end end # Returns all label sets with their values expressed as hashes with their sum/count def values v = @store.all_values v.each_with_object({}) do |(label_set, v), acc| actual_label_set = label_set.reject{|l| l == :quantile } acc[actual_label_set] ||= { "count" => 0.0, "sum" => 0.0 } acc[actual_label_set][label_set[:quantile]] = v end end def init_label_set(labels) base_label_set = label_set_for(labels) @store.synchronize do @store.set(labels: base_label_set.merge(quantile: "count"), val: 0) @store.set(labels: base_label_set.merge(quantile: "sum"), val: 0) end end private def reserved_labels [:quantile] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
prometheus-client-2.0.0 | lib/prometheus/client/summary.rb |