39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module QueryLimiting
 | 
						|
    # Returns true if we should enable tracking of query counts.
 | 
						|
    #
 | 
						|
    # This is only enabled in production/staging if we're running on GitLab.com.
 | 
						|
    # This ensures we don't produce any errors that users can't do anything
 | 
						|
    # about themselves.
 | 
						|
    def self.enable?
 | 
						|
      Rails.env.development? || Rails.env.test?
 | 
						|
    end
 | 
						|
 | 
						|
    # Allows the current request to execute any number of SQL queries.
 | 
						|
    #
 | 
						|
    # This method should _only_ be used when there's a corresponding issue to
 | 
						|
    # reduce the number of queries.
 | 
						|
    #
 | 
						|
    # The issue URL is only meant to push developers into creating an issue
 | 
						|
    # instead of blindly whitelisting offending blocks of code.
 | 
						|
    def self.whitelist(issue_url)
 | 
						|
      return unless enable_whitelist?
 | 
						|
 | 
						|
      unless issue_url.start_with?('https://')
 | 
						|
        raise(
 | 
						|
          ArgumentError,
 | 
						|
          'You must provide a valid issue URL in order to whitelist a block of code'
 | 
						|
        )
 | 
						|
      end
 | 
						|
 | 
						|
      Transaction&.current&.whitelisted = true
 | 
						|
    end
 | 
						|
 | 
						|
    def self.enable_whitelist?
 | 
						|
      Rails.env.development? || Rails.env.test?
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |