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 )