35 lines
		
	
	
		
			876 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			876 B
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module Metrics
 | 
						|
    class BootTimeTracker
 | 
						|
      include Singleton
 | 
						|
 | 
						|
      SUPPORTED_RUNTIMES = [:puma, :sidekiq, :console].freeze
 | 
						|
 | 
						|
      def startup_time
 | 
						|
        @startup_time || 0
 | 
						|
      end
 | 
						|
 | 
						|
      def track_boot_time!(logger: Gitlab::AppJsonLogger)
 | 
						|
        return if @startup_time
 | 
						|
 | 
						|
        runtime = Gitlab::Runtime.safe_identify
 | 
						|
        return unless SUPPORTED_RUNTIMES.include?(runtime)
 | 
						|
 | 
						|
        @startup_time = Gitlab::Metrics::System.process_runtime_elapsed_seconds
 | 
						|
 | 
						|
        Gitlab::Metrics.gauge(
 | 
						|
          :gitlab_rails_boot_time_seconds, 'Time elapsed for Rails primary process to finish startup'
 | 
						|
        ).set({}, @startup_time)
 | 
						|
 | 
						|
        logger.info(message: 'Application boot finished', runtime: runtime.to_s, duration_s: @startup_time)
 | 
						|
      end
 | 
						|
 | 
						|
      def reset!
 | 
						|
        @startup_time = nil
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |