File Coverage

blib/lib/OpenTelemetry/SDK/Trace/SpanLimits.pm
Criterion Covered Total %
statement 31 31 100.0
branch n/a
condition n/a
subroutine 13 13 100.0
pod 8 8 100.0
total 52 52 100.0


line stmt bran cond sub pod time code
1 6     6   244934 use Object::Pad ':experimental( init_expr mop )';
  6         15546  
  6         42  
2             # ABSTRACT: A class that governs the configuration of spans
3              
4             package OpenTelemetry::SDK::Trace::SpanLimits;
5              
6             our $VERSION = '0.028';
7              
8             class OpenTelemetry::SDK::Trace::SpanLimits {
9 6     6   2777 use List::Util 'first';
  6         13  
  6         487  
10 6     6   768 use OpenTelemetry::Common 'config';
  6         64527  
  6         383  
11 6     6   31 use Ref::Util 'is_arrayref';
  6         9  
  6         270  
12 6     6   34 use Scalar::Util 'looks_like_number';
  6         10  
  6         8662  
13              
14             my $logger = OpenTelemetry::Common::internal_logger;
15              
16 8     8 1 7425 field $attribute_count_limit :reader = config(qw( SPAN_ATTRIBUTE_COUNT_LIMIT ATTRIBUTE_COUNT_LIMIT )) // 128;
17 8     15 1 27 field $event_attribute_count_limit :reader = config(qw( EVENT_ATTRIBUTE_COUNT_LIMIT ATTRIBUTE_COUNT_LIMIT )) // 128;
  15         1565  
18 15     9 1 65 field $link_attribute_count_limit :reader = config(qw( LINK_ATTRIBUTE_COUNT_LIMIT ATTRIBUTE_COUNT_LIMIT )) // 128;
  9         1367  
19              
20 9     7 1 53 field $attribute_length_limit :reader = config(qw( SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT ATTRIBUTE_VALUE_LENGTH_LIMIT ));
  7         2685  
21 7     14 1 19 field $event_attribute_length_limit :reader = config(qw( EVENT_ATTRIBUTE_VALUE_LENGTH_LIMIT ATTRIBUTE_VALUE_LENGTH_LIMIT ));
  14         888  
22 14     2 1 150 field $link_attribute_length_limit :reader = config(qw( LINK_ATTRIBUTE_VALUE_LENGTH_LIMIT ATTRIBUTE_VALUE_LENGTH_LIMIT ));
  2         253  
23              
24 2     16 1 4 field $event_count_limit :reader = config(qw( SPAN_EVENT_COUNT_LIMIT )) // 128;
  16         1135  
25 16     9 1 78 field $link_count_limit :reader = config(qw( SPAN_LINK_COUNT_LIMIT )) // 128;
  9         1081  
26              
27 9         52 ADJUST {
28             my $meta = Object::Pad::MOP::Class->for_caller;
29              
30             my $optional_number_with_min = sub ( $name, $min ) {
31             my $field = $meta->get_field( '$' . $name );
32             my $value = $field->value($self);
33              
34             return unless defined $value;
35             return if looks_like_number $value && int $value == $value && $value >= $min;
36              
37             $logger->warn(
38             "Invalid value for SpanLimits: $name must be an integer greater than $min if set",
39             { value => $value },
40             );
41              
42             $field->value($self) = undef;
43             };
44              
45             my $must_be_positive_int = sub ( $name, $default ) {
46             my $field = $meta->get_field( '$' . $name );
47             my $value = $field->value($self);
48              
49             return if looks_like_number $value && int $value == $value && $value > 0;
50              
51             $logger->warn(
52             "Invalid value for SpanLimits: $name must be a positive integer",
53             { value => $value },
54             );
55              
56             $field->value($self) = $default;
57             };
58              
59             $optional_number_with_min->( attribute_length_limit => 32 );
60             $optional_number_with_min->( event_attribute_length_limit => 32 );
61             $optional_number_with_min->( link_attribute_length_limit => 32 );
62              
63             $must_be_positive_int->( event_attribute_count_limit => 128 );
64             $must_be_positive_int->( link_attribute_count_limit => 128 );
65             $must_be_positive_int->( attribute_count_limit => 128 );
66             $must_be_positive_int->( event_count_limit => 128 );
67             $must_be_positive_int->( link_count_limit => 128 );
68             }
69             }