The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

OpenTelemetry::SDK::Trace::Sampler::ParentBased - A composite sampler

SYNOPSIS

my $sampler = OpenTelemetry::SDK::Trace::Sampler::ParentBased->new(
    root => $parent_sampler,
);

my $result = $sampler->should_sample( ... );

if ( $result->sampled ) {
    ...
}

DESCRIPTION

This module provides a sampler whose should_sample method will always return a result that is neither sampled nor recording.

METHODS

This class implements the OpenTelemetry::SDK::Trace::Sampler role. Please consult that module's documentation for details on the behaviours it provides.

new

$sampler = OpenTelemetry::SDK::Trace::Sampler::ParentBased->new(
    root                      => $root,
    remote_parent_sampled     => $remote_sampled     // AlwaysOn,
    remote_parent_not_sampled => $remote_not_sampled // AlwaysOff,
    local_parent_sampled      => $local_sampled      // AlwaysOn,
    local_parent_not_sampled  => $local_not_sampled  // AlwaysOff,
);

Takes a number of samplers on which the sampling decision will be delegated depending on the span in question. The delegate samplers will be used in the following cases:

root

Used for spans without a parent, or "root" spans.

remote_parent_sampled

Used for spans with a remote parent that is flagged as sampled.

remote_parent_not_sampled

Used for spans with a remote parent that is not flagged as sampled.

local_parent_sampled

Used for spans with a local parent that is flagged as sampled.

local_parent_not_sampled

Used for spans with a local parent that is not flagged as sampled.

The span's OpenTelemetry::Trace::SpanContext is used to determine the above cases. A span is a root span when calling invalid on it returns true. A span's parent is remote when calling remote on the span context returns true, and sampled when calling sampled on the associated OpenTelemetry::Propagator::TraceContext::TraceFlags returns true.

Of these parameters, only the root sampler is required. If not provided, the rest will default to the OpenTelemetry::SDK::Trace::Sampler::AlwaysOn sampler for sampled spans, and the OpenTelemetry::SDK::Trace::Sampler::AlwaysOff sampler for not sampled spans.

description

$string = $sampler->description;

Returns a string starting with ParentBased and composed of the descriptions of the individual samplers this sampler is composed of.

should_sample

$result = $sampler->should_sample(
    context    => $context,
    trace_id   => $trace_id,
    kind       => $span_kind,
    name       => $span_name,
    attributes => \%attributes,
    links      => \@links,
);

This method will read the span from the OpenTelemetry::Context object provided in the context key (or the current context, if none is provided) and delegate this sampling decision to the sampler that has been configured for that span depending on whether it is a root span, whether it has a remote parent, and whether it is sampled, as described above.

Any additional parameters passed to this method will be forwarded to the delegated sampler.

SEE ALSO

OpenTelemetry::Context
OpenTelemetry::Propagator::TraceContext::TraceFlags
OpenTelemetry::SDK::Trace::Sampler::AlwaysOff
OpenTelemetry::SDK::Trace::Sampler::AlwaysOn
OpenTelemetry::SDK::Trace::Sampler::Result
OpenTelemetry::SDK::Trace::Sampler
OpenTelemetry::Trace::SpanContext

COPYRIGHT AND LICENSE

This software is copyright (c) 2023 by José Joaquín Atria.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.