Class: ReactOnRailsPro::OpenTelemetry::ClientSpan
- Inherits:
-
Object
- Object
- ReactOnRailsPro::OpenTelemetry::ClientSpan
- Defined in:
- lib/react_on_rails_pro/open_telemetry.rb,
sig/react_on_rails_pro/open_telemetry.rbs
Instance Method Summary collapse
-
#initialize(span, context) ⇒ ClientSpan
constructor
A new instance of ClientSpan.
- #inject(headers) ⇒ Object
- #record_response(status) ⇒ Object
- #record_response_chunk(chunk) ⇒ Object
- #request_body=(body) ⇒ Object
- #seal_request_size ⇒ Object
- #wait_for_request_close ⇒ false
- #within_context { ... } ⇒ Object
Constructor Details
#initialize(span, context) ⇒ ClientSpan
Returns a new instance of ClientSpan.
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 31 def initialize(span, context) @span = span @context = context @request_body = nil @request_size = 0 @response_size = 0 @request_sealed = true @response_finished = false @finished = false @finish_mutex = Mutex.new end |
Instance Method Details
#inject(headers) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 48 def inject(headers) carrier = {} ::OpenTelemetry::Context.with_current(@context) do ::OpenTelemetry.propagation.inject(carrier) end carrier.each do |name, value| next unless TRACE_HEADER_NAMES.include?(name.to_s.downcase) set_header(headers, name.to_s, value) end rescue StandardError nil end |
#record_response(status) ⇒ Object
62 63 64 65 66 67 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 62 def record_response(status) @span.set_attribute(STATUS_ATTRIBUTE, status) mark_error if status >= 400 && status != ReactOnRailsPro::STATUS_SEND_BUNDLE rescue StandardError nil end |
#record_response_chunk(chunk) ⇒ Object
69 70 71 72 73 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 69 def record_response_chunk(chunk) @response_size += chunk.bytesize rescue StandardError nil end |
#request_body=(body) ⇒ Object
43 44 45 46 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 43 def request_body=(body) @request_body = body @request_size = ReactOnRailsPro::OpenTelemetry.body_size(body) end |
#seal_request_size ⇒ Object
79 80 81 82 83 84 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 79 def seal_request_size final_request_size = ReactOnRailsPro::OpenTelemetry.body_size(@request_body) @request_size = [@request_size, final_request_size].max @request_sealed = true finish_if_ready end |
#wait_for_request_close ⇒ false
75 76 77 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 75 def wait_for_request_close @request_sealed = false end |
#within_context { ... } ⇒ Object
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/react_on_rails_pro/open_telemetry.rb', line 86 def within_context(&) ::OpenTelemetry::Context.with_current(@context, &) rescue StandardError @request_sealed = true mark_error raise ensure @response_finished = true finish_if_ready end |