Commit 1fef354c authored by Hercules Merscher's avatar Hercules Merscher 🌴
Browse files

Merge branch 'feat-labkit-metrics-get' into 'master'

feat: Retrieving a metric by the name

See merge request !153

Merged-by: Hercules Merscher's avatarHercules Merscher <hmerscher@gitlab.com>
Approved-by: Bob Van Landuyt's avatarBob Van Landuyt <bob@gitlab.com>
Reviewed-by: Bob Van Landuyt's avatarBob Van Landuyt <bob@gitlab.com>
parents b69acbdb e042d2af
Loading
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -3,13 +3,16 @@
## Usage

```ruby
# create a new counter metric
# create a new counter metric and returns it
http_requests = Labkit::Metrics::Client.counter(:http_requests, 'A counter of HTTP requests made')
# start using the counter
http_requests.increment

# resets the registry and reinitializes all metrics files.
# resets the registry and reinitializes all metrics files
Labkit::Metrics::Client.reset!

# retrieves the metric (be it a counter, gauge, histogram, summary)
http_requests = Labkit::Metrics::Client.get(:http_requests)
```

### Counter
+5 −1
Original line number Diff line number Diff line
@@ -72,12 +72,16 @@ module Labkit
        Registry.reset!
      end

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

      class << self
        extend Forwardable

        def_delegators :instance,
          :enable!, :disable!, :counter, :gauge, :histogram, :summary, :reset!, :enabled?,
          :configure, :reinitialize_on_pid_change, :configuration
          :configure, :reinitialize_on_pid_change, :configuration, :get

        private :instance
      end
+9 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ module Labkit
        #   counter = Registry.safe_register(:counter, :http_requests_total, 'Total HTTP requests')
        def safe_register(metric_type, name, *args)
          REGISTER_MUTEX.synchronize do
            wrapped_registry.get(name) || wrapped_registry.method(metric_type).call(name, *args)
            get(name) || wrapped_registry.method(metric_type).call(name, *args)
          end
        end

@@ -43,6 +43,14 @@ module Labkit
          end
        end

        # Returns the metric for the given name from the Prometheus registry.
        #
        # @param metric_name [Symbol, String] The name of the metric
        # @return [Prometheus::Client::Metric, nil] The registered metric or nil if it does not exist
        def get(metric_name)
          wrapped_registry.get(metric_name)
        end

        private

        def wrapped_registry
+16 −7
Original line number Diff line number Diff line
@@ -3,13 +3,6 @@
require "prometheus/client"

RSpec.describe Labkit::Metrics::Client, :with_metrics_config do
  [
    [:counter, Prometheus::Client::Counter],
    [:histogram, Prometheus::Client::Histogram],
    [:summary, Prometheus::Client::Summary],
    [:gauge, Prometheus::Client::Gauge]
  ].each do |(metric_type, metric_class)|
    describe ".#{metric_type}" do
  let(:info) do
    {
      name: :metric_example,
@@ -18,6 +11,13 @@ RSpec.describe Labkit::Metrics::Client, :with_metrics_config do
    }
  end

  [
    [:counter, Prometheus::Client::Counter],
    [:histogram, Prometheus::Client::Histogram],
    [:summary, Prometheus::Client::Summary],
    [:gauge, Prometheus::Client::Gauge]
  ].each do |(metric_type, metric_class)|
    describe ".#{metric_type}" do
      subject(:metric) { described_class.send(metric_type, info[:name], info[:docstring], info[:base_labels]) }

      it "registers a #{metric_type}" do
@@ -37,6 +37,15 @@ RSpec.describe Labkit::Metrics::Client, :with_metrics_config do
        expect(metric).to be_a Labkit::Metrics::Null
      end
    end

    describe ".get" do
      it "returns registered #{metric_type}" do
        metric = described_class.send(metric_type, info[:name], info[:docstring], info[:base_labels])
        previously_registered_metric = described_class.get(info[:name])

        expect(previously_registered_metric).to eq metric
      end
    end
  end

  describe '.reset!' do
+9 −0
Original line number Diff line number Diff line
@@ -21,5 +21,14 @@ RSpec.describe Labkit::Metrics::Registry, :with_metrics_config do
        expect(metric2).to eq metric
      end
    end

    describe "#get" do
      it "returns registered #{metric_type}" do
        metric = described_class.safe_register(metric_type, metric_name, docstring, base_labels)
        previously_registered_metric = described_class.get(metric_name)

        expect(previously_registered_metric).to eq metric
      end
    end
  end
end