Module: XRay::NetHttp::HTTPInstanceInterceptor
- Includes:
- Facets::Helper
- Defined in:
- lib/aws-xray-sdk/facets/net_http.rb
Overview
Instance level interceptor to capture http requests as subsegments
Constant Summary
Constants included from Facets::Helper
Facets::Helper::TRACE_HEADER, Facets::Helper::TRACE_HEADER_PROXY
Instance Method Summary collapse
-
#ec2_metadata_request?(req) ⇒ Boolean
HTTP requests to IMDS endpoint will be made to 169.254.169.254 for both IMDSv1 and IMDSv2 with the latter including the X-aws-ec2-metadata-token-ttl-seconds header.
- #initialize(*options) ⇒ Object
-
#lambda_runtime_request? ⇒ Boolean
HTTP requests to AWS Lambda Ruby Runtime will have the address and port matching the value set in ENV.
- #request(req, body = nil, &block) ⇒ Object
- #xray_sampling_request?(req) ⇒ Boolean
Methods included from Facets::Helper
#construct_header, #prep_header_str, #should_sample?
Instance Method Details
#ec2_metadata_request?(req) ⇒ Boolean
HTTP requests to IMDS endpoint will be made to 169.254.169.254 for both IMDSv1 and IMDSv2 with the latter including the X-aws-ec2-metadata-token-ttl-seconds header.
36 37 38 |
# File 'lib/aws-xray-sdk/facets/net_http.rb', line 36 def (req) req.uri && req.uri.hostname == '169.254.169.254' end |
#initialize(*options) ⇒ Object
19 20 21 |
# File 'lib/aws-xray-sdk/facets/net_http.rb', line 19 def initialize(*) super(*) end |
#lambda_runtime_request? ⇒ Boolean
HTTP requests to AWS Lambda Ruby Runtime will have the address and port matching the value set in ENV
25 26 27 |
# File 'lib/aws-xray-sdk/facets/net_http.rb', line 25 def lambda_runtime_request? ENV['AWS_LAMBDA_RUNTIME_API'] == "#{address}:#{port}" end |
#request(req, body = nil, &block) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/aws-xray-sdk/facets/net_http.rb', line 40 def request(req, body = nil, &block) # Do not trace requests to xray or aws lambda runtime or ec2 metadata endpoint if xray_sampling_request?(req) || lambda_runtime_request? || (req) return super end entity = XRay.recorder.current_entity capture = !(entity && entity.namespace && entity.namespace == 'aws'.freeze) if started? && capture && entity XRay.recorder.capture(address, namespace: 'remote') do |subsegment| protocol = use_ssl? ? 'https'.freeze : 'http'.freeze # avoid modifying original variable iport = port.nil? ? nil : %(:#{port}) # do not capture query string path = req.path.split('?')[0] if req.path uri = %(#{protocol}://#{address}#{iport}#{path}) = { url: uri, method: req.method } subsegment.merge_http_request request: req[TRACE_HEADER] = prep_header_str entity: subsegment begin res = super = { status: res.code.to_i, content_length: res.content_length } subsegment.merge_http_response response: res rescue Exception => e subsegment.add_exception exception: e raise e end end else super end end |
#xray_sampling_request?(req) ⇒ Boolean
29 30 31 |
# File 'lib/aws-xray-sdk/facets/net_http.rb', line 29 def xray_sampling_request?(req) req.path && (req.path == ('/GetSamplingRules') || req.path == ('/SamplingTargets')) end |