diff options
Diffstat (limited to 'metrics_server')
-rw-r--r-- | metrics_server/dependencies.rb | 1 | ||||
-rw-r--r-- | metrics_server/metrics_server.rb | 23 |
2 files changed, 22 insertions, 2 deletions
diff --git a/metrics_server/dependencies.rb b/metrics_server/dependencies.rb index 02cec1173e0..bfa6aae8ef8 100644 --- a/metrics_server/dependencies.rb +++ b/metrics_server/dependencies.rb @@ -31,5 +31,6 @@ require_relative '../lib/gitlab/metrics/exporter/gc_request_middleware' require_relative '../lib/gitlab/health_checks/probes/collection' require_relative '../lib/gitlab/health_checks/probes/status' require_relative '../lib/gitlab/process_management' +require_relative '../lib/gitlab/process_supervisor' # rubocop:enable Naming/FileName diff --git a/metrics_server/metrics_server.rb b/metrics_server/metrics_server.rb index 70769459019..2aadc63d65d 100644 --- a/metrics_server/metrics_server.rb +++ b/metrics_server/metrics_server.rb @@ -2,10 +2,29 @@ require_relative '../config/boot' -require_relative 'dependencies' - class MetricsServer # rubocop:disable Gitlab/NamespacedClass + # The singleton instance used to supervise the Puma metrics server. + PumaProcessSupervisor = Class.new(Gitlab::ProcessSupervisor) + class << self + def start_for_puma + metrics_dir = ::Prometheus::Client.configuration.multiprocess_files_dir + + start_server = proc do + MetricsServer.spawn('puma', metrics_dir: metrics_dir).tap do |pid| + Gitlab::AppLogger.info("Starting Puma metrics server with pid #{pid}") + end + end + + supervisor = PumaProcessSupervisor.instance + supervisor.supervise(start_server.call) do + next unless supervisor.alive + + Gitlab::AppLogger.info('Puma metrics server terminated, restarting...') + start_server.call + end + end + def spawn(target, metrics_dir:, gitlab_config: nil, wipe_metrics_dir: false) ensure_valid_target!(target) |