diff options
author | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-05-29 14:19:43 +0200 |
---|---|---|
committer | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-06-02 19:45:58 +0200 |
commit | c134a72cdb7e6de8b70dc60de99cf4edc68a9227 (patch) | |
tree | 0082ba4d422cc53eea223583bca9c98cbc823c96 /lib | |
parent | 770f07cd5c68075bb261f4b6139c92b2ac9309c0 (diff) | |
download | gitlab-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')
-rw-r--r-- | lib/gitlab/health_checks/prometheus_text.rb | 38 | ||||
-rw-r--r-- | lib/gitlab/metrics.rb | 2 | ||||
-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 |