module Prometheus::Client::Formats::Text

Text format is human readable mainly used for manual inspection.

Constants

CONTENT_TYPE
DELIMITER
HELP_LINE
LABEL
MEDIA_TYPE
METRIC_LINE
REGEX
REPLACE
SEPARATOR
TYPE_LINE
VERSION

Public Class Methods

marshal(registry) click to toggle source
# File lib/prometheus/client/formats/text.rb, line 22
def self.marshal(registry)
  lines = []

  registry.metrics.each do |metric|
    lines << format(TYPE_LINE, metric.name, metric.type)
    lines << format(HELP_LINE, metric.name, escape(metric.docstring))

    metric.values.each do |label_set, value|
      representation(metric, label_set, value) { |l| lines << l }
    end
  end

  # there must be a trailing delimiter
  (lines << nil).join(DELIMITER)
end

Private Class Methods

escape(string, format = :doc) click to toggle source
# File lib/prometheus/client/formats/text.rb, line 89
def escape(string, format = :doc)
  string.to_s.gsub(REGEX[format], REPLACE)
end
histogram(name, set, value) { |metric(bucket, labels(merge(le: q)), v)| ... } click to toggle source
# File lib/prometheus/client/formats/text.rb, line 63
def histogram(name, set, value)
  bucket = "#{name}_bucket"
  value.each do |q, v|
    yield metric(bucket, labels(set.merge(le: q)), v)
  end
  yield metric(bucket, labels(set.merge(le: '+Inf')), value.total)

  l = labels(set)
  yield metric("#{name}_sum", l, value.sum)
  yield metric("#{name}_count", l, value.total)
end
labels(set) click to toggle source
# File lib/prometheus/client/formats/text.rb, line 79
def labels(set)
  return if set.empty?

  strings = set.each_with_object([]) do |(key, value), memo|
    memo << format(LABEL, key, escape(value, :label))
  end

  "{#{strings.join(SEPARATOR)}}"
end
metric(name, labels, value) click to toggle source
# File lib/prometheus/client/formats/text.rb, line 75
def metric(name, labels, value)
  format(METRIC_LINE, name, labels, value)
end
representation(metric, label_set, value) { |metric(name, labels(set), value)| ... } click to toggle source
# File lib/prometheus/client/formats/text.rb, line 41
def representation(metric, label_set, value, &block)
  set = metric.base_labels.merge(label_set)

  if metric.type == :summary
    summary(metric.name, set, value, &block)
  elsif metric.type == :histogram
    histogram(metric.name, set, value, &block)
  else
    yield metric(metric.name, labels(set), value)
  end
end
summary(name, set, value) { |metric(name, labels(merge(quantile: q)), v)| ... } click to toggle source
# File lib/prometheus/client/formats/text.rb, line 53
def summary(name, set, value)
  value.each do |q, v|
    yield metric(name, labels(set.merge(quantile: q)), v)
  end

  l = labels(set)
  yield metric("#{name}_sum", l, value.sum)
  yield metric("#{name}_count", l, value.total)
end