summaryrefslogtreecommitdiff
path: root/lib/gitlab
diff options
context:
space:
mode:
authorPawel Chojnacki <pawel@chojnacki.ws>2017-05-29 14:19:43 +0200
committerPawel Chojnacki <pawel@chojnacki.ws>2017-06-02 19:45:58 +0200
commitc134a72cdb7e6de8b70dc60de99cf4edc68a9227 (patch)
tree0082ba4d422cc53eea223583bca9c98cbc823c96 /lib/gitlab
parent770f07cd5c68075bb261f4b6139c92b2ac9309c0 (diff)
downloadgitlab-ce-c134a72cdb7e6de8b70dc60de99cf4edc68a9227.tar.gz
Move Prometheus presentation logic to PrometheusText
+ Use NullMetrics to mock metrics when unused + Use method_missing in NullMetrics mocking + Update prometheus gem to version that correctly uses transitive dependencies + Ensure correct folders are used in Multiprocess prometheus client tests. + rename Sessions controller's metric
Diffstat (limited to 'lib/gitlab')
-rw-r--r--lib/gitlab/health_checks/prometheus_text.rb38
-rw-r--r--lib/gitlab/metrics.rb2
-rw-r--r--lib/gitlab/metrics/null_metric.rb (renamed from lib/gitlab/metrics/dummy_metric.rb)22
3 files changed, 45 insertions, 17 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
diff --git a/lib/gitlab/metrics.rb b/lib/gitlab/metrics.rb
index a41cbd214a1..34f6b32f7da 100644
--- a/lib/gitlab/metrics.rb
+++ b/lib/gitlab/metrics.rb
@@ -73,7 +73,7 @@ module Gitlab
if prometheus_metrics_enabled?
registry.get(name)
else
- DummyMetric.new
+ NullMetric.new
end
end
diff --git a/lib/gitlab/metrics/dummy_metric.rb b/lib/gitlab/metrics/null_metric.rb
index d27bb83854a..1501cd38676 100644
--- a/lib/gitlab/metrics/dummy_metric.rb
+++ b/lib/gitlab/metrics/null_metric.rb
@@ -1,7 +1,12 @@
module Gitlab
module Metrics
# Mocks ::Prometheus::Client::Metric and all derived metrics
- class DummyMetric
+ class NullMetric
+ def method_missing(name, *args, &block)
+ nil
+ end
+
+ # these methods shouldn't be called when metrics are disabled
def get(*args)
raise NotImplementedError
end
@@ -9,21 +14,6 @@ module Gitlab
def values(*args)
raise NotImplementedError
end
-
- # counter
- def increment(*args)
- # noop
- end
-
- # gauge
- def set(*args)
- # noop
- end
-
- # histogram / summary
- def observe(*args)
- # noop
- end
end
end
end