From 2c811bc87b578be219d2980ac20afff4c1139f82 Mon Sep 17 00:00:00 2001 From: Aleksei Lipniagov Date: Fri, 16 Aug 2019 19:14:07 +0300 Subject: Apply review suggestions Use service class instead of static module methods, style fixes --- config.ru | 2 +- config/initializers/7_prometheus_metrics.rb | 2 +- lib/prometheus/cleanup_multiproc_dir.rb | 13 ------ lib/prometheus/cleanup_multiproc_dir_service.rb | 23 ++++++++++ .../cleanup_multiproc_dir_service_spec.rb | 51 ++++++++++++++++++++++ spec/lib/prometheus/cleanup_multiproc_dir_spec.rb | 51 ---------------------- 6 files changed, 76 insertions(+), 66 deletions(-) delete mode 100644 lib/prometheus/cleanup_multiproc_dir.rb create mode 100644 lib/prometheus/cleanup_multiproc_dir_service.rb create mode 100644 spec/lib/prometheus/cleanup_multiproc_dir_service_spec.rb delete mode 100644 spec/lib/prometheus/cleanup_multiproc_dir_spec.rb diff --git a/config.ru b/config.ru index 048eb0d8392..750c84f7642 100644 --- a/config.ru +++ b/config.ru @@ -26,7 +26,7 @@ warmup do |app| # It needs to be done as early as here to ensure metrics files aren't deleted. # After we hit our app in `warmup`, first metrics and corresponding files already being created, # for example in `lib/gitlab/metrics/requests_rack_middleware.rb`. - Prometheus::CleanupMultiprocDir.call if master_process? + Prometheus::CleanupMultiprocDirService.new.execute if master_process? client = Rack::MockRequest.new(app) client.get('/') diff --git a/config/initializers/7_prometheus_metrics.rb b/config/initializers/7_prometheus_metrics.rb index cc5100b692c..143b34b5368 100644 --- a/config/initializers/7_prometheus_metrics.rb +++ b/config/initializers/7_prometheus_metrics.rb @@ -33,7 +33,7 @@ end Sidekiq.configure_server do |config| config.on(:startup) do # webserver metrics are cleaned up in config.ru: `warmup` block - Prometheus::CleanupMultiprocDir.call if Prometheus::PidProvider.worker_id == 'sidekiq' + Prometheus::CleanupMultiprocDirService.new.execute Gitlab::Metrics::SidekiqMetricsExporter.instance.start end diff --git a/lib/prometheus/cleanup_multiproc_dir.rb b/lib/prometheus/cleanup_multiproc_dir.rb deleted file mode 100644 index 6605455c528..00000000000 --- a/lib/prometheus/cleanup_multiproc_dir.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module Prometheus - module CleanupMultiprocDir - def self.call - if dir = ::Prometheus::Client.configuration.multiprocess_files_dir - old_metrics = Dir[File.join(dir, '*.db')] - - FileUtils.rm_rf(old_metrics) - end - end - end -end diff --git a/lib/prometheus/cleanup_multiproc_dir_service.rb b/lib/prometheus/cleanup_multiproc_dir_service.rb new file mode 100644 index 00000000000..6418b4de166 --- /dev/null +++ b/lib/prometheus/cleanup_multiproc_dir_service.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Prometheus + class CleanupMultiprocDirService + include Gitlab::Utils::StrongMemoize + + def execute + FileUtils.rm_rf(old_metrics) if old_metrics + end + + private + + def old_metrics + strong_memoize(:old_metrics) do + Dir[File.join(multiprocess_files_dir, '*.db')] if multiprocess_files_dir + end + end + + def multiprocess_files_dir + ::Prometheus::Client.configuration.multiprocess_files_dir + end + end +end diff --git a/spec/lib/prometheus/cleanup_multiproc_dir_service_spec.rb b/spec/lib/prometheus/cleanup_multiproc_dir_service_spec.rb new file mode 100644 index 00000000000..c7302a1a656 --- /dev/null +++ b/spec/lib/prometheus/cleanup_multiproc_dir_service_spec.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Prometheus::CleanupMultiprocDirService do + describe '.call' do + subject { described_class.new.execute } + + let(:metrics_multiproc_dir) { Dir.mktmpdir } + let(:metrics_file_path) { File.join(metrics_multiproc_dir, 'counter_puma_master-0.db') } + + before do + FileUtils.touch(metrics_file_path) + end + + after do + FileUtils.rm_r(metrics_multiproc_dir) + end + + context 'when `multiprocess_files_dir` is defined' do + before do + expect(Prometheus::Client.configuration) + .to receive(:multiprocess_files_dir) + .and_return(metrics_multiproc_dir) + .at_least(:once) + end + + it 'removes old metrics' do + expect { subject } + .to change { File.exist?(metrics_file_path) } + .from(true) + .to(false) + end + end + + context 'when `multiprocess_files_dir` is not defined' do + before do + expect(Prometheus::Client.configuration) + .to receive(:multiprocess_files_dir) + .and_return(nil) + .at_least(:once) + end + + it 'does not remove any files' do + expect { subject } + .not_to change { File.exist?(metrics_file_path) } + .from(true) + end + end + end +end diff --git a/spec/lib/prometheus/cleanup_multiproc_dir_spec.rb b/spec/lib/prometheus/cleanup_multiproc_dir_spec.rb deleted file mode 100644 index 8b694bb71cf..00000000000 --- a/spec/lib/prometheus/cleanup_multiproc_dir_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Prometheus::CleanupMultiprocDir do - describe '.call' do - subject { described_class.call } - - let(:metrics_multiproc_dir) { Dir.mktmpdir } - let(:metrics_file_path) { File.join(metrics_multiproc_dir, 'counter_puma_master-0.db') } - - before do - File.new(metrics_file_path, 'w+') - end - - after do - FileUtils.rm_r(metrics_multiproc_dir) - end - - context 'when `multiprocess_files_dir` is defined' do - before do - expect(Prometheus::Client.configuration) - .to receive(:multiprocess_files_dir) - .and_return(metrics_multiproc_dir) - .at_least(:once) - end - - it 'removes old metrics' do - expect { subject } - .to change { File.exist?(metrics_file_path) } - .from(true) - .to(false) - end - end - - context 'when `multiprocess_files_dir` is not defined' do - before do - expect(Prometheus::Client.configuration) - .to receive(:multiprocess_files_dir) - .and_return(nil) - .at_least(:once) - end - - it 'does not remove any files' do - expect { subject } - .not_to change { File.exist?(metrics_file_path) } - .from(true) - end - end - end -end -- cgit v1.2.1