Class: OpenTelemetry::Sampler::XRay::RateLimitingSampler

Inherits:
Object
  • Object
show all
Defined in:
lib/opentelemetry/sampler/xray/rate_limiting_sampler.rb

Overview

RateLimitingSampler is a Sampler that uses a RateLimiter to determine if it should sample or not based on the quota balance available.

Instance Method Summary collapse

Constructor Details

#initialize(quota) ⇒ RateLimitingSampler

Returns a new instance of RateLimitingSampler.



15
16
17
18
# File 'lib/opentelemetry/sampler/xray/rate_limiting_sampler.rb', line 15

def initialize(quota)
  @quota = quota
  @reservoir = RateLimiter.new(quota)
end

Instance Method Details

#should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/opentelemetry/sampler/xray/rate_limiting_sampler.rb', line 20

def should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:)
  tracestate = OpenTelemetry::Trace.current_span(parent_context).context.tracestate
  if @reservoir.take(1)
    OpenTelemetry::SDK::Trace::Samplers::Result.new(
      decision: OpenTelemetry::SDK::Trace::Samplers::Decision::RECORD_AND_SAMPLE,
      tracestate: tracestate,
      attributes: attributes
    )
  else
    OpenTelemetry::SDK::Trace::Samplers::Result.new(
      decision: OpenTelemetry::SDK::Trace::Samplers::Decision::DROP,
      tracestate: tracestate,
      attributes: attributes
    )
  end
end

#to_sObject



37
38
39
# File 'lib/opentelemetry/sampler/xray/rate_limiting_sampler.rb', line 37

def to_s
  "RateLimitingSampler{rate limiting sampling with sampling config of #{@quota} req/sec and 0% of additional requests}"
end