Class: PgEventstore::Web::Metrics::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/pg_eventstore/web/metrics/formatter.rb,
sig/pg_eventstore/web/metrics/formatter.rbs

Overview

Renders metric families into the Prometheus text exposition format (version 0.0.4).

Constant Summary collapse

CONTENT_TYPE =
'text/plain; version=0.0.4; charset=utf-8'

Instance Method Summary collapse

Instance Method Details

#call(families) ⇒ String



13
14
15
# File 'lib/pg_eventstore/web/metrics/formatter.rb', line 13

def call(families)
  "#{families.map { |family| format_family(family) }.join("\n")}\n"
end

#escape_label_value(value) ⇒ String



39
40
41
# File 'lib/pg_eventstore/web/metrics/formatter.rb', line 39

def escape_label_value(value)
  value.gsub('\\', '\\\\\\\\').gsub("\n", '\\n').gsub('"', '\\"')
end

#format_family(family) ⇒ String



21
22
23
24
25
26
27
# File 'lib/pg_eventstore/web/metrics/formatter.rb', line 21

def format_family(family)
  lines = ["# HELP #{family.name} #{family.help}", "# TYPE #{family.name} #{family.type}"]
  family.samples.each do |sample|
    lines.push("#{family.name}#{format_labels(sample[:labels])} #{sample[:value]}")
  end
  lines.join("\n")
end

#format_labels(labels) ⇒ String



31
32
33
34
35
# File 'lib/pg_eventstore/web/metrics/formatter.rb', line 31

def format_labels(labels)
  return '' if labels.empty?

  "{#{labels.map { |name, value| %(#{name}="#{escape_label_value(value.to_s)}") }.join(',')}}"
end