Class: PgEventstore::Web::Metrics::Formatter
- Inherits:
-
Object
- Object
- PgEventstore::Web::Metrics::Formatter
- 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
- #call(families) ⇒ String
- #escape_label_value(value) ⇒ String
- #format_family(family) ⇒ String
- #format_labels(labels) ⇒ String
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 |