Filename | /opt/flows/lib/lib/perl5/Search/Elasticsearch/Error.pm |
Statements | Executed 23 statements in 806µs |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
1 | 1 | 1 | 17µs | 47µs | BEGIN@34 | Search::Elasticsearch::Error::
1 | 1 | 1 | 4µs | 4µs | BEGIN@39 | Search::Elasticsearch::Error::
0 | 0 | 0 | 0s | 0s | TO_JSON | Search::Elasticsearch::Error::
0 | 0 | 0 | 0s | 0s | _compare | Search::Elasticsearch::Error::
0 | 0 | 0 | 0s | 0s | _stack | Search::Elasticsearch::Error::
0 | 0 | 0 | 0s | 0s | _stringify | Search::Elasticsearch::Error::
0 | 0 | 0 | 0s | 0s | is | Search::Elasticsearch::Error::
0 | 0 | 0 | 0s | 0s | new | Search::Elasticsearch::Error::
0 | 0 | 0 | 0s | 0s | stacktrace | Search::Elasticsearch::Error::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Search::Elasticsearch::Error; | ||||
2 | 1 | 900ns | $Search::Elasticsearch::Error::VERSION = '2.02'; | ||
3 | 1 | 200ns | our $DEBUG = 0; | ||
4 | |||||
5 | 1 | 7µs | @Search::Elasticsearch::Error::Internal::ISA = __PACKAGE__; | ||
6 | 1 | 3µs | @Search::Elasticsearch::Error::Param::ISA = __PACKAGE__; | ||
7 | 1 | 2µs | @Search::Elasticsearch::Error::NoNodes::ISA = __PACKAGE__; | ||
8 | 1 | 2µs | @Search::Elasticsearch::Error::Unauthorized::ISA = __PACKAGE__; | ||
9 | 1 | 2µs | @Search::Elasticsearch::Error::Forbidden::ISA = __PACKAGE__; | ||
10 | 1 | 2µs | @Search::Elasticsearch::Error::Illegal::ISA = __PACKAGE__; | ||
11 | 1 | 2µs | @Search::Elasticsearch::Error::Request::ISA = __PACKAGE__; | ||
12 | 1 | 4µs | @Search::Elasticsearch::Error::Timeout::ISA = __PACKAGE__; | ||
13 | 1 | 2µs | @Search::Elasticsearch::Error::Cxn::ISA = __PACKAGE__; | ||
14 | 1 | 2µs | @Search::Elasticsearch::Error::Serializer::ISA = __PACKAGE__; | ||
15 | |||||
16 | @Search::Elasticsearch::Error::Conflict::ISA | ||||
17 | 1 | 4µs | = ( 'Search::Elasticsearch::Error::Request', __PACKAGE__ ); | ||
18 | |||||
19 | @Search::Elasticsearch::Error::Missing::ISA | ||||
20 | 1 | 3µs | = ( 'Search::Elasticsearch::Error::Request', __PACKAGE__ ); | ||
21 | |||||
22 | @Search::Elasticsearch::Error::RequestTimeout::ISA | ||||
23 | 1 | 3µs | = ( 'Search::Elasticsearch::Error::Request', __PACKAGE__ ); | ||
24 | |||||
25 | @Search::Elasticsearch::Error::ContentLength::ISA | ||||
26 | 1 | 4µs | = ( __PACKAGE__, 'Search::Elasticsearch::Error::Request' ); | ||
27 | |||||
28 | @Search::Elasticsearch::Error::SSL::ISA | ||||
29 | 1 | 4µs | = ( __PACKAGE__, 'Search::Elasticsearch::Error::Cxn' ); | ||
30 | |||||
31 | @Search::Elasticsearch::Error::Unavailable::ISA | ||||
32 | 1 | 4µs | = ( 'Search::Elasticsearch::Error::Cxn', __PACKAGE__ ); | ||
33 | |||||
34 | # spent 47µs (17+30) within Search::Elasticsearch::Error::BEGIN@34 which was called:
# once (17µs+30µs) by Search::Elasticsearch::Util::BEGIN@4 at line 37 | ||||
35 | 1 | 10µs | 1 | 30µs | '""' => '_stringify', # spent 30µs making 1 call to overload::import |
36 | 'cmp' => '_compare', | ||||
37 | 1 | 28µs | 1 | 47µs | ); # spent 47µs making 1 call to Search::Elasticsearch::Error::BEGIN@34 |
38 | |||||
39 | 2 | 707µs | 1 | 4µs | # spent 4µs within Search::Elasticsearch::Error::BEGIN@39 which was called:
# once (4µs+0s) by Search::Elasticsearch::Util::BEGIN@4 at line 39 # spent 4µs making 1 call to Search::Elasticsearch::Error::BEGIN@39 |
40 | |||||
41 | #=================================== | ||||
42 | sub new { | ||||
43 | #=================================== | ||||
44 | my ( $class, $type, $msg, $vars, $caller ) = @_; | ||||
45 | return $type if ref $type; | ||||
46 | $caller ||= 0; | ||||
47 | |||||
48 | my $error_class = 'Search::Elasticsearch::Error::' . $type; | ||||
49 | $msg = 'Unknown error' unless defined $msg; | ||||
50 | |||||
51 | local $DEBUG = 2 if $type eq 'Internal'; | ||||
52 | |||||
53 | my $stack = $class->_stack; | ||||
54 | |||||
55 | my $self = bless { | ||||
56 | type => $type, | ||||
57 | text => $msg, | ||||
58 | vars => $vars, | ||||
59 | stack => $stack, | ||||
60 | }, $error_class; | ||||
61 | |||||
62 | return $self; | ||||
63 | } | ||||
64 | |||||
65 | #=================================== | ||||
66 | sub is { | ||||
67 | #=================================== | ||||
68 | my $self = shift; | ||||
69 | for (@_) { | ||||
70 | return 1 if $self->isa("Search::Elasticsearch::Error::$_"); | ||||
71 | } | ||||
72 | return 0; | ||||
73 | } | ||||
74 | |||||
75 | #=================================== | ||||
76 | sub _stringify { | ||||
77 | #=================================== | ||||
78 | my $self = shift; | ||||
79 | local $Data::Dumper::Terse = 1; | ||||
80 | local $Data::Dumper::Indent = !!$DEBUG; | ||||
81 | |||||
82 | unless ( $self->{msg} ) { | ||||
83 | my $stack = $self->{stack}; | ||||
84 | my $caller = $stack->[0]; | ||||
85 | $self->{msg} | ||||
86 | = sprintf( "[%s] ** %s, called from sub %s at %s line %d.", | ||||
87 | $self->{type}, $self->{text}, @{$caller}[ 3, 1, 2 ] ); | ||||
88 | |||||
89 | if ( $self->{vars} ) { | ||||
90 | $self->{msg} .= sprintf( " With vars: %s\n", | ||||
91 | Data::Dumper::Dumper $self->{vars} ); | ||||
92 | } | ||||
93 | |||||
94 | if ( @$stack > 1 ) { | ||||
95 | $self->{msg} | ||||
96 | .= sprintf( "Stacktrace:\n%s\n", $self->stacktrace($stack) ); | ||||
97 | } | ||||
98 | } | ||||
99 | return $self->{msg}; | ||||
100 | |||||
101 | } | ||||
102 | |||||
103 | #=================================== | ||||
104 | sub _compare { | ||||
105 | #=================================== | ||||
106 | my ( $self, $other, $swap ) = @_; | ||||
107 | $self .= ''; | ||||
108 | ( $self, $other ) = ( $other, $self ) if $swap; | ||||
109 | return $self cmp $other; | ||||
110 | } | ||||
111 | |||||
112 | #=================================== | ||||
113 | sub _stack { | ||||
114 | #=================================== | ||||
115 | my $self = shift; | ||||
116 | my $caller = shift() || 2; | ||||
117 | |||||
118 | my @stack; | ||||
119 | while ( my @caller = caller( ++$caller ) ) { | ||||
120 | next if $caller[0] eq 'Try::Tiny'; | ||||
121 | |||||
122 | if ( $caller[3] =~ /^(.+)::__ANON__\[(.+):(\d+)\]$/ ) { | ||||
123 | @caller = ( $1, $2, $3, '(ANON)' ); | ||||
124 | } | ||||
125 | elsif ( $caller[1] =~ /^\(eval \d+\)/ ) { | ||||
126 | $caller[3] = "modified(" . $caller[3] . ")"; | ||||
127 | } | ||||
128 | |||||
129 | next | ||||
130 | if $caller[0] =~ /^Search::Elasticsearch/ | ||||
131 | and ( $DEBUG < 2 or $caller[3] eq 'Try::Tiny::try' ); | ||||
132 | push @stack, [ @caller[ 0, 1, 2, 3 ] ]; | ||||
133 | last unless $DEBUG > 1; | ||||
134 | } | ||||
135 | return \@stack; | ||||
136 | } | ||||
137 | |||||
138 | #=================================== | ||||
139 | sub stacktrace { | ||||
140 | #=================================== | ||||
141 | my $self = shift; | ||||
142 | my $stack = shift || $self->_stack(); | ||||
143 | |||||
144 | my $o = sprintf "%s\n%-4s %-50s %-5s %s\n%s\n", | ||||
145 | '-' x 80, '#', 'Package', 'Line', 'Sub-routine', '-' x 80; | ||||
146 | |||||
147 | my $i = 1; | ||||
148 | for (@$stack) { | ||||
149 | $o .= sprintf "%-4d %-50s %4d %s\n", $i++, @{$_}[ 0, 2, 3 ]; | ||||
150 | } | ||||
151 | |||||
152 | return $o .= ( '-' x 80 ) . "\n"; | ||||
153 | } | ||||
154 | |||||
155 | #=================================== | ||||
156 | sub TO_JSON { | ||||
157 | #=================================== | ||||
158 | my $self = shift; | ||||
159 | return $self->_stringify; | ||||
160 | } | ||||
161 | 1 | 9µs | 1; | ||
162 | |||||
163 | # ABSTRACT: Errors thrown by Search::Elasticsearch | ||||
164 | |||||
165 | __END__ |