Sha256: dabd31d04df40ff99c2fca953ab7e129c7d2f6fadea8d55a59ea168ca9585d51

Contents?: true

Size: 1.49 KB

Versions: 5

Compression:

Stored size: 1.49 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

      private

      def reserved_labels
        [:quantile]
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
prometheus-client-1.0.0 lib/prometheus/client/summary.rb
prometheus-client-0.11.0.pre.alpha.1 lib/prometheus/client/summary.rb
prometheus-client-0.10.0 lib/prometheus/client/summary.rb
prometheus-client-0.10.0.pre.alpha.2 lib/prometheus/client/summary.rb
prometheus-client-0.10.0.pre.alpha.1 lib/prometheus/client/summary.rb