Class: Multiplayer::RequestMiddleware

Inherits:
Middleware
  • Object
show all
Defined in:
lib/multiplayer/middleware/request_middleware.rb

Instance Attribute Summary

Attributes inherited from Middleware

#headers_to_mask, #mask_deb_span_payload, #max_payload_size, #schemify_doc_span_payload

Instance Method Summary collapse

Methods inherited from Middleware

#initialize

Constructor Details

This class inherits a constructor from Multiplayer::Middleware

Instance Method Details

#call(env) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/multiplayer/middleware/request_middleware.rb', line 3

def call(env)
  current_span = OpenTelemetry::Trace.current_span
  trace_id = current_span.context.trace_id.unpack1("H*")
  request = Rack::Request.new(env)

  request_headers = extract_request_headers(env)
  masked_headers = mask_headers(request_headers, @headers_to_mask)
  current_span.set_attribute(ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, masked_headers.to_json)

  if request_headers.key?("content-type")  == "application/json"
    request_body = (extract_request_body(request)).dup

    if trace_id.start_with?(MULTIPLAYER_TRACE_DEBUG_PREFIX) && @mask_deb_span_payload
      request_body = mask_body(request_body)
    elsif trace_id.start_with?(MULTIPLAYER_TRACE_DOC_PREFIX) || @schemify_doc_span_payload
      request_body = schemify(request_body)
    elsif !request_body.is_a?(String)
      request_body = JSON.generate(request_body)
    end

    request_body = truncate_if_needed(request_body)

    current_span.set_attribute(ATTR_MULTIPLAYER_HTTP_REQUEST_BODY, request_body.is_a?(String) ? request_body : request_body.to_json)
  end

  @app.call(env)
end