diff options
Diffstat (limited to 'lib/gitlab/health_checks/prometheus_text.rb')
-rw-r--r-- | lib/gitlab/health_checks/prometheus_text.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/gitlab/health_checks/prometheus_text.rb b/lib/gitlab/health_checks/prometheus_text.rb new file mode 100644 index 00000000000..a01e6b2be1f --- /dev/null +++ b/lib/gitlab/health_checks/prometheus_text.rb @@ -0,0 +1,38 @@ +module Gitlab::HealthChecks + class PrometheusText + 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 |