summaryrefslogtreecommitdiff
path: root/lib/gitlab/health_checks/prometheus_text_format.rb
blob: 5fc6f19c37c75737d21e1d8ccbf597792be1ea85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module Gitlab::HealthChecks
  class PrometheusTextFormat
    def marshal(metrics)
      metrics_with_type_declarations(metrics).join("\n")
    end

    private

    def metrics_with_type_declarations(metrics)
      type_declaration_added = {}

      metrics.flat_map do |metric|
        metric_lines = []

        unless type_declaration_added.has_key?(metric.name)
          type_declaration_added[metric.name] = true
          metric_lines << metric_type_declaration(metric)
        end

        metric_lines << metric_text(metric)
      end
    end

    def metric_type_declaration(metric)
      "# TYPE #{metric.name} gauge"
    end

    def metric_text(metric)
      labels = metric.labels&.map { |key, value| "#{key}=\"#{value}\"" }&.join(',') || ''

      if labels.empty?
        "#{metric.name} #{metric.value}"
      else
        "#{metric.name}{#{labels}} #{metric.value}"
      end
    end
  end
end