OpenTelemetry-SDK

 view release on metacpan or  search on metacpan

lib/OpenTelemetry/SDK/Trace/Span.pm  view on Meta::CPAN

use Object::Pad ':experimental( init_expr mop )';

package OpenTelemetry::SDK::Trace::Span;

our $VERSION = '0.028';

use OpenTelemetry::Attributes;

class OpenTelemetry::SDK::Trace::Span
    :isa(OpenTelemetry::Trace::Span)
    :does(OpenTelemetry::Attributes)
{
    use List::Util qw( any pairs );
    use Ref::Util qw( is_arrayref is_hashref );
    use Time::HiRes 'time';

    use OpenTelemetry::Constants
        -span_kind => { -as => sub { shift =~ s/^SPAN_KIND_//r } };

    use OpenTelemetry::Common ();
    use OpenTelemetry::SDK::Trace::SpanLimits;
    use OpenTelemetry::SDK::Trace::Span::Readable;
    use OpenTelemetry::Trace::Event;
    use OpenTelemetry::Trace::Link;
    use OpenTelemetry::Trace::SpanContext;
    use OpenTelemetry::Trace::Span::Status;
    use OpenTelemetry::Trace;

    use isa qw(
        Exception::Base
        Exception::Class::Base
        OpenTelemetry::Trace::SpanContext
    );

    my $logger = OpenTelemetry::Common::internal_logger;

    field $dropped_events      = 0;
    field $dropped_links       = 0;
    field $end;
    field $kind       :param   = INTERNAL;
    field $limits     :param //= OpenTelemetry::SDK::Trace::SpanLimits->new;
    field $name       :param;
    field $resource   :param   = undef;
    field $scope      :param;
    field $start      :param   = undef;
    field $status              = OpenTelemetry::Trace::Span::Status->unset;
    field @events;
    field @links;
    field @processors;
    field $parent_span_context;

    # Internal method for adding a single link
    #
    #     $self->$add_link({
    #         context    => $valid_span_context,
    #         attributes => \%link_attributes,
    #     })
    #
    # Links with invalid span contexts are ignored
    #
    method $add_link ( $args ) {
        return unless isa_OpenTelemetry_Trace_SpanContext($args->{context})
            && $args->{context}->valid;

        if ( scalar @links >= $limits->link_count_limit ) {
            $dropped_links++;
            $logger->warn('Dropped link because it would exceed specified limit');
            return;
        }

        push @links, OpenTelemetry::Trace::Link->new(
            context                => $args->{context},
            attributes             => $args->{attributes},
            attribute_count_limit  => $limits->link_attribute_count_limit,



( run in 1.788 second using v1.01-cache-2.11-cpan-39bf76dae61 )