Class: Gitlab::RequestContext
- Inherits:
-
Object
- Object
- Gitlab::RequestContext
- Includes:
- Utils::StrongMemoize, Singleton
- Defined in:
- lib/gitlab/request_context.rb
Constant Summary collapse
- RequestDeadlineExceeded =
Class.new(StandardError)
Instance Attribute Summary collapse
-
#client_ip ⇒ Object
Returns the value of attribute client_ip.
-
#request_start_time ⇒ Object
Returns the value of attribute request_start_time.
-
#spam_params ⇒ Object
Returns the value of attribute spam_params.
-
#start_thread_cpu_time ⇒ Object
Returns the value of attribute start_thread_cpu_time.
-
#thread_memory_allocations ⇒ Object
Returns the value of attribute thread_memory_allocations.
Class Method Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#client_ip ⇒ Object
Returns the value of attribute client_ip.
10 11 12 |
# File 'lib/gitlab/request_context.rb', line 10 def client_ip @client_ip end |
#request_start_time ⇒ Object
Returns the value of attribute request_start_time.
10 11 12 |
# File 'lib/gitlab/request_context.rb', line 10 def request_start_time @request_start_time end |
#spam_params ⇒ Object
Returns the value of attribute spam_params.
10 11 12 |
# File 'lib/gitlab/request_context.rb', line 10 def spam_params @spam_params end |
#start_thread_cpu_time ⇒ Object
Returns the value of attribute start_thread_cpu_time.
10 11 12 |
# File 'lib/gitlab/request_context.rb', line 10 def start_thread_cpu_time @start_thread_cpu_time end |
#thread_memory_allocations ⇒ Object
Returns the value of attribute thread_memory_allocations.
10 11 12 |
# File 'lib/gitlab/request_context.rb', line 10 def thread_memory_allocations @thread_memory_allocations end |
Class Method Details
.instance ⇒ Object
13 14 15 |
# File 'lib/gitlab/request_context.rb', line 13 def instance Gitlab::SafeRequestStore[:request_context] ||= new end |
.start_request_context(request:) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/gitlab/request_context.rb', line 17 def start_request_context(request:) # We need to use Rack::Request to be consistent with Rails due to a Rails bug described in # https://gitlab.com/gitlab-org/gitlab-foss/issues/58573#note_149799010 # Hosts behind a load balancer will only see 127.0.0.1 for the load balancer's IP. rack_req = Rack::Request.new(request.env) instance.client_ip = rack_req.ip instance.spam_params = ::Spam::SpamParams.new_from_request(request: request) instance.request_start_time = Gitlab::Metrics::System.real_time end |
.start_thread_context ⇒ Object
28 29 30 31 |
# File 'lib/gitlab/request_context.rb', line 28 def start_thread_context instance.start_thread_cpu_time = Gitlab::Metrics::System.thread_cpu_time instance.thread_memory_allocations = Gitlab::Memory::Instrumentation.start_thread_memory_allocations end |
Instance Method Details
#ensure_deadline_not_exceeded! ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/gitlab/request_context.rb', line 42 def ensure_deadline_not_exceeded! return unless enabled? return unless request_deadline return if Gitlab::Metrics::System.real_time < request_deadline raise RequestDeadlineExceeded, "Request takes longer than #{max_request_duration_seconds} seconds" end |
#request_deadline ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/gitlab/request_context.rb', line 34 def request_deadline strong_memoize(:request_deadline) do next unless request_start_time request_start_time + max_request_duration_seconds end end |