diff options
author | Nick Thomas <nick@gitlab.com> | 2018-05-10 12:31:36 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2018-05-10 12:31:36 +0000 |
commit | b7e9c968c24e5d380f5522067e46170a351c6b6c (patch) | |
tree | d498cbfb40e87b1c93bc4abb7ab389671a6200a1 | |
parent | 3016cf26970353626db8437fb77a3ac22f83288c (diff) | |
parent | 204af2e1019e661fddc451ad0cfb982453d4085b (diff) | |
download | gitlab-ce-b7e9c968c24e5d380f5522067e46170a351c6b6c.tar.gz |
Merge branch 'sh-reset-prometheus-metrics-tests' into 'master'
Support resetting of Prometheus metrics between test runs
Closes #39968
See merge request gitlab-org/gitlab-ce!18836
-rw-r--r-- | Gemfile | 2 | ||||
-rw-r--r-- | Gemfile.lock | 4 | ||||
-rw-r--r-- | doc/development/testing_guide/best_practices.md | 5 | ||||
-rw-r--r-- | lib/gitlab/metrics/prometheus.rb | 8 | ||||
-rw-r--r-- | spec/lib/gitlab/metrics/prometheus_spec.rb | 18 | ||||
-rw-r--r-- | spec/spec_helper.rb | 7 |
6 files changed, 41 insertions, 3 deletions
@@ -294,7 +294,7 @@ group :metrics do gem 'influxdb', '~> 0.2', require: false # Prometheus - gem 'prometheus-client-mmap', '~> 0.9.1' + gem 'prometheus-client-mmap', '~> 0.9.2' gem 'raindrops', '~> 0.18' end diff --git a/Gemfile.lock b/Gemfile.lock index ee28465decd..201dba5fc5a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -632,7 +632,7 @@ GEM parser unparser procto (0.0.3) - prometheus-client-mmap (0.9.1) + prometheus-client-mmap (0.9.2) pry (0.10.4) coderay (~> 1.1.0) method_source (~> 0.8.1) @@ -1130,7 +1130,7 @@ DEPENDENCIES peek-sidekiq (~> 1.0.3) pg (~> 0.18.2) premailer-rails (~> 1.9.7) - prometheus-client-mmap (~> 0.9.1) + prometheus-client-mmap (~> 0.9.2) pry-byebug (~> 3.4.1) pry-rails (~> 0.3.4) rack-attack (~> 4.4.1) diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md index 7b32e0a47e1..61fa5459b91 100644 --- a/doc/development/testing_guide/best_practices.md +++ b/doc/development/testing_guide/best_practices.md @@ -230,6 +230,11 @@ describe "#==" do end ``` +### Prometheus tests + +Prometheus metrics may be preserved from one test run to another. To ensure that metrics are +reset before each example, add the `:prometheus` tag to the Rspec test. + ### Matchers Custom matchers should be created to clarify the intent and/or hide the diff --git a/lib/gitlab/metrics/prometheus.rb b/lib/gitlab/metrics/prometheus.rb index d12ba0ec176..d41a855bff1 100644 --- a/lib/gitlab/metrics/prometheus.rb +++ b/lib/gitlab/metrics/prometheus.rb @@ -25,6 +25,14 @@ module Gitlab end end + def reset_registry! + clear_memoization(:registry) + + REGISTRY_MUTEX.synchronize do + ::Prometheus::Client.reset! + end + end + def registry strong_memoize(:registry) do REGISTRY_MUTEX.synchronize do diff --git a/spec/lib/gitlab/metrics/prometheus_spec.rb b/spec/lib/gitlab/metrics/prometheus_spec.rb new file mode 100644 index 00000000000..3d4dd5fdf01 --- /dev/null +++ b/spec/lib/gitlab/metrics/prometheus_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe Gitlab::Metrics::Prometheus, :prometheus do + let(:all_metrics) { Gitlab::Metrics } + let(:registry) { all_metrics.registry } + + describe '#reset_registry!' do + it 'clears existing metrics' do + registry.counter(:test, 'test metric') + + expect(registry.metrics.count).to eq(1) + + all_metrics.reset_registry! + + expect(all_metrics.registry.metrics.count).to eq(0) + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b4fc596a751..d3de2331244 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -137,6 +137,13 @@ RSpec.configure do |config| reset_delivered_emails! end + config.before(:example, :prometheus) do + matching_files = File.join(::Prometheus::Client.configuration.multiprocess_files_dir, "*.db") + Dir[matching_files].map { |filename| File.delete(filename) if File.file?(filename) } + + Gitlab::Metrics.reset_registry! + end + config.around(:each, :use_clean_rails_memory_store_caching) do |example| caching_store = Rails.cache Rails.cache = ActiveSupport::Cache::MemoryStore.new |