OpenTelemetry-SDK
view release on metacpan or search on metacpan
lib/OpenTelemetry/SDK.pm view on Meta::CPAN
package OpenTelemetry::SDK;
# ABSTRACT: An implementation of the OpenTelemetry SDK for Perl
our $VERSION = '0.028';
use strict;
use warnings;
use experimental 'signatures';
use feature 'state';
use Feature::Compat::Try;
use Module::Runtime;
use OpenTelemetry::Common 'config';
use OpenTelemetry::Propagator::Composite;
use OpenTelemetry::SDK::Trace::TracerProvider;
use OpenTelemetry::X;
use OpenTelemetry;
use Ref::Util 'is_coderef';
use Scalar::Util 'blessed';
use isa 'OpenTelemetry::X';
sub configure_propagators ($, @args) {
my $logger = OpenTelemetry::Common::internal_logger;
state %map = (
b3 => 'B3',
b3multi => 'B3::Multi',
baggage => 'Baggage',
jaeger => 'Jaeger',
none => 'None',
ottrace => 'OTTrace',
tracecontext => 'TraceContext',
xray => 'XRay',
);
push @args, split ',',
( config('PROPAGATORS') // 'tracecontext,baggage' ) =~ s/\s//gr
unless @args;
my ( %seen, @propagators );
for my $candidate ( grep !!$_, @args ) {
if ( blessed $candidate ) {
if ( $candidate->DOES('OpenTelemetry::Propagator') ) {
push @propagators, $candidate;
}
else {
$logger->warnf("Attempted to configure a '%s' propagator, but it does not do the OpenTelemetry::Propagator role", ref $candidate );
}
next;
}
my $suffix = $map{$candidate};
unless ($suffix) {
$logger->warn("Unknown propagator '$candidate' cannot be configured");
next;
}
next if $seen{$suffix}++;
my $class = 'OpenTelemetry::Propagator::' . $suffix;
try {
Module::Runtime::require_module $class;
push @propagators, $class->new;
}
catch ($e) {
die OpenTelemetry::X->create(
Invalid => "Error configuring '$candidate' propagator: $e",
);
}
}
# If we have no good ones, keep the default
return OpenTelemetry->propagator unless @propagators;
# If we have only one good one, set that one as the global one
return OpenTelemetry->propagator = shift @propagators if @propagators == 1;
( run in 1.667 second using v1.01-cache-2.11-cpan-39bf76dae61 )