diff options
author | Stan Hu <stanhu@gmail.com> | 2018-05-09 08:29:30 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-05-10 00:33:42 +0300 |
commit | 204af2e1019e661fddc451ad0cfb982453d4085b (patch) | |
tree | 3b6484d2eba16771b96a41f8f2e994678f278ecb | |
parent | 5b0e96d09a7b6309384ef4c300c56872adba0626 (diff) |
Support resetting of Prometheus metrics between test runs
Adding the :prometheus tag to an rspec test will clear out
memory-mapped files and reset the registry.
Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/39968
-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
@@ -297,7 +297,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 50800af9437..7b7d4bd0fa1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -634,7 +634,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) @@ -1133,7 +1133,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 |