Module: XRay::Facets::Helper
- Defined in:
- lib/aws-xray-sdk/facets/helper.rb
Overview
Hepler functions shared for all external frameworks/libraries like make sampling decisions from incoming http requests etc.
Constant Summary collapse
- TRACE_HEADER =
'X-Amzn-Trace-Id'.freeze
- TRACE_HEADER_PROXY =
'HTTP_X_AMZN_TRACE_ID'.freeze
Instance Method Summary collapse
-
#construct_header(headers:) ⇒ TraceHeader
Construct a
TraceHeader
object from headers of the incoming request. -
#prep_header_str(entity:) ⇒ Object
Prepares a X-Ray header string based on the provided Segment/Subsegment.
-
#should_sample?(header_obj:, recorder:, sampling_req:, **args) ⇒ Boolean
The sampling decision coming from
trace_header
always has the highest precedence.
Instance Method Details
#construct_header(headers:) ⇒ TraceHeader
Construct a TraceHeader
object from headers of the incoming
request. This method should always return a TraceHeader
object
regardless of tracing header's presence in the incoming request.
17 18 19 20 21 22 23 |
# File 'lib/aws-xray-sdk/facets/helper.rb', line 17 def construct_header(headers:) if v = headers[TRACE_HEADER_PROXY] || headers[TRACE_HEADER] TraceHeader.from_header_string header_str: v else TraceHeader.empty_header end end |
#prep_header_str(entity:) ⇒ Object
Prepares a X-Ray header string based on the provided Segment/Subsegment.
44 45 46 |
# File 'lib/aws-xray-sdk/facets/helper.rb', line 44 def prep_header_str(entity:) TraceHeader.from_entity(entity: entity).header_string end |
#should_sample?(header_obj:, recorder:, sampling_req:, **args) ⇒ Boolean
The sampling decision coming from trace_header
always has the
highest precedence. If the trace_header
doesn't contain
sampling decision then it checks if sampling is enabled or not in the
recorder. If not enbaled it returns 'true'. Otherwise it uses
sampling rules to decide.
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/aws-xray-sdk/facets/helper.rb', line 30 def should_sample?(header_obj:, recorder:, sampling_req:, **args) # check outside decision if i = header_obj.sampled !i.zero? # check sampling rules elsif recorder.sampling_enabled? recorder.sampler.sample_request?(sampling_req) # sample if no reason not to else true end end |