Class: Labkit::Metrics::Client

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Singleton
Defined in:
lib/labkit/metrics/client.rb

Overview

A thin wrapper around Prometheus::Client from the prometheus-client-mmap gem gitlab.com/gitlab-org/ruby/gems/prometheus-client-mmap

Instance Method Summary collapse

Constructor Details

#initializeClient

Returns a new instance of Client.



22
23
24
# File 'lib/labkit/metrics/client.rb', line 22

def initialize
  @enabled = Concurrent::AtomicBoolean.new(true)
end

Instance Method Details

#counter(name, docstring, base_labels = {}) ⇒ Object



53
54
55
# File 'lib/labkit/metrics/client.rb', line 53

def counter(name, docstring, base_labels = {})
  safe_provide_metric(:counter, name, docstring, base_labels)
end

#disable!Object



30
31
32
# File 'lib/labkit/metrics/client.rb', line 30

def disable!
  @enabled.make_false
end

#enable!Object



34
35
36
# File 'lib/labkit/metrics/client.rb', line 34

def enable!
  @enabled.make_true
end

#enabled?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/labkit/metrics/client.rb', line 38

def enabled?
  @enabled.true? && metrics_folder_present?
end

#gauge(name, docstring, base_labels = {}, multiprocess_mode = :all) ⇒ Object



67
68
69
# File 'lib/labkit/metrics/client.rb', line 67

def gauge(name, docstring, base_labels = {}, multiprocess_mode = :all)
  safe_provide_metric(:gauge, name, docstring, base_labels, multiprocess_mode)
end

#get(metric_name) ⇒ Object



75
76
77
# File 'lib/labkit/metrics/client.rb', line 75

def get(metric_name)
  Registry.get(metric_name)
end

#histogram(name, docstring, base_labels = {}, buckets = Prometheus::Client::Histogram::DEFAULT_BUCKETS) ⇒ Object



61
62
63
64
65
# File 'lib/labkit/metrics/client.rb', line 61

def histogram(
  name, docstring, base_labels = {},
  buckets = Prometheus::Client::Histogram::DEFAULT_BUCKETS)
  safe_provide_metric(:histogram, name, docstring, base_labels, buckets)
end

#metrics_folder_present?Boolean

Returns:

  • (Boolean)


48
49
50
51
# File 'lib/labkit/metrics/client.rb', line 48

def metrics_folder_present?
  dir = configuration.multiprocess_files_dir
  dir && Dir.exist?(dir) && File.writable?(dir)
end

#reset!Object



71
72
73
# File 'lib/labkit/metrics/client.rb', line 71

def reset!
  Registry.reset!
end

#safe_provide_metric(metric_type, name, *args) ⇒ Object



42
43
44
45
46
# File 'lib/labkit/metrics/client.rb', line 42

def safe_provide_metric(metric_type, name, *args)
  return Null.instance unless enabled?

  Registry.safe_register(metric_type, name, *args)
end

#summary(name, docstring, base_labels = {}) ⇒ Object



57
58
59
# File 'lib/labkit/metrics/client.rb', line 57

def summary(name, docstring, base_labels = {})
  safe_provide_metric(:summary, name, docstring, base_labels)
end

#wrapped_clientObject



26
27
28
# File 'lib/labkit/metrics/client.rb', line 26

def wrapped_client
  @client ||= ::Prometheus::Client
end