Class: OpenTelemetry::Sampler::XRay::InternalAWSXRayRemoteSampler
- Inherits:
-
Object
- Object
- OpenTelemetry::Sampler::XRay::InternalAWSXRayRemoteSampler
- Defined in:
- lib/opentelemetry/sampler/xray/aws_xray_remote_sampler.rb
Overview
InternalAWSXRayRemoteSampler contains all core XRay Sampler Functionality, however it is NOT Parent-based (e.g. Sample logic runs for each span)
Class Method Summary collapse
Instance Method Summary collapse
- #description ⇒ Object
-
#initialize(endpoint: '127.0.0.1:2000', polling_interval: DEFAULT_RULES_POLLING_INTERVAL_SECONDS, resource: OpenTelemetry::SDK::Resources::Resource.create) ⇒ InternalAWSXRayRemoteSampler
constructor
A new instance of InternalAWSXRayRemoteSampler.
- #should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:) ⇒ Boolean
Constructor Details
#initialize(endpoint: '127.0.0.1:2000', polling_interval: DEFAULT_RULES_POLLING_INTERVAL_SECONDS, resource: OpenTelemetry::SDK::Resources::Resource.create) ⇒ InternalAWSXRayRemoteSampler
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 |
# File 'lib/opentelemetry/sampler/xray/aws_xray_remote_sampler.rb', line 46 def initialize(endpoint: '127.0.0.1:2000', polling_interval: DEFAULT_RULES_POLLING_INTERVAL_SECONDS, resource: OpenTelemetry::SDK::Resources::Resource.create) if polling_interval.nil? || polling_interval < 10 OpenTelemetry.logger.warn( "'polling_interval' is undefined or too small. Defaulting to #{DEFAULT_RULES_POLLING_INTERVAL_SECONDS} seconds" ) @rule_polling_interval_millis = DEFAULT_RULES_POLLING_INTERVAL_SECONDS * 1000 else @rule_polling_interval_millis = polling_interval * 1000 end @rule_polling_jitter_millis = rand * 5 * 1000 @target_polling_interval = DEFAULT_TARGET_POLLING_INTERVAL_SECONDS @target_polling_jitter_millis = (rand / 10) * 1000 @aws_proxy_endpoint = endpoint || DEFAULT_AWS_PROXY_ENDPOINT @fallback_sampler = OpenTelemetry::Sampler::XRay::FallbackSampler.new @client_id = self.class.generate_client_id @rule_cache = OpenTelemetry::Sampler::XRay::RuleCache.new(resource) @sampling_client = OpenTelemetry::Sampler::XRay::AWSXRaySamplingClient.new(@aws_proxy_endpoint) # Start the Sampling Rules poller start_sampling_rules_poller # Start the Sampling Targets poller start_sampling_targets_poller end |
Class Method Details
.generate_client_id ⇒ Object
193 194 195 196 |
# File 'lib/opentelemetry/sampler/xray/aws_xray_remote_sampler.rb', line 193 def generate_client_id hex_chars = ('0'..'9').to_a + ('a'..'f').to_a Array.new(24) { hex_chars.sample }.join end |
Instance Method Details
#description ⇒ Object
97 98 99 |
# File 'lib/opentelemetry/sampler/xray/aws_xray_remote_sampler.rb', line 97 def description "InternalAWSXRayRemoteSampler{aws_proxy_endpoint=#{@aws_proxy_endpoint}, rule_polling_interval_millis=#{@rule_polling_interval_millis}}" end |
#should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:) ⇒ Boolean
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/opentelemetry/sampler/xray/aws_xray_remote_sampler.rb', line 74 def should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:) if @rule_cache.expired? OpenTelemetry.logger.debug('Rule cache is expired, so using fallback sampling strategy') return @fallback_sampler.should_sample?( trace_id: trace_id, parent_context: parent_context, links: links, name: name, kind: kind, attributes: attributes ) end matched_rule = @rule_cache.get_matched_rule(attributes) if matched_rule return matched_rule.should_sample?( trace_id: trace_id, parent_context: parent_context, links: links, name: name, kind: kind, attributes: attributes ) end OpenTelemetry.logger.debug( 'Using fallback sampler as no rule match was found. This is likely due to a bug, since default rule should always match' ) @fallback_sampler.should_sample?( trace_id: trace_id, parent_context: parent_context, links: links, name: name, kind: kind, attributes: attributes ) end |