prometheus.rb 1.58 KB
Newer Older
1
2
3
4
5
6
7
require 'prometheus/client'

module Gitlab
  module Metrics
    module Prometheus
      include Gitlab::CurrentSettings

8
      def metrics_folder_present?
9
10
        ENV.has_key?('prometheus_multiproc_dir') &&
          ::Dir.exist?(ENV['prometheus_multiproc_dir']) &&
11
12
13
          ::File.writable?(ENV['prometheus_multiproc_dir'])
      end

14
      def prometheus_metrics_enabled?
15
16
17
        return @prometheus_metrics_enabled if defined?(@prometheus_metrics_enabled)

        @prometheus_metrics_enabled = prometheus_metrics_enabled_unmemoized
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
      end

      def registry
        @registry ||= ::Prometheus::Client.registry
      end

      def counter(name, docstring, base_labels = {})
        provide_metric(name) || registry.counter(name, docstring, base_labels)
      end

      def summary(name, docstring, base_labels = {})
        provide_metric(name) || registry.summary(name, docstring, base_labels)
      end

      def gauge(name, docstring, base_labels = {})
        provide_metric(name) || registry.gauge(name, docstring, base_labels)
      end

      def histogram(name, docstring, base_labels = {}, buckets = ::Prometheus::Client::Histogram::DEFAULT_BUCKETS)
        provide_metric(name) || registry.histogram(name, docstring, base_labels, buckets)
      end

      def provide_metric(name)
        if prometheus_metrics_enabled?
          registry.get(name)
        else
          NullMetric.new
        end
      end
47
48
49
50
51
52

      private

      def prometheus_metrics_enabled_unmemoized
        metrics_folder_present? && current_application_settings[:prometheus_metrics_enabled] || false
      end
53
54
    end
  end
55
end