Filename | /usr/local/libexec/sympa/Sympa/Spool/Task.pm |
Statements | Executed 32991 statements in 51.6ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
115 | 1 | 1 | 51.4ms | 33.3s | _create_all_tasks | Sympa::Spool::Task::
115 | 1 | 1 | 18.0ms | 2.83s | _existing_tasks | Sympa::Spool::Task::
2300 | 2 | 1 | 7.27ms | 7.27ms | _filter | Sympa::Spool::Task::
2300 | 1 | 1 | 1.48ms | 1.48ms | _marshal_regexp (xsub) | Sympa::Spool::Task::
2528 | 3 | 2 | 1.47ms | 1.47ms | _generator (xsub) | Sympa::Spool::Task::
115 | 1 | 1 | 1.23ms | 33.3s | _load | Sympa::Spool::Task::
2301 | 2 | 1 | 896µs | 896µs | _marshal_keys (xsub) | Sympa::Spool::Task::
1 | 1 | 1 | 38µs | 53µs | BEGIN@26 | Sympa::Spool::Task::
1 | 1 | 1 | 30µs | 31µs | BEGIN@29 | Sympa::Spool::Task::
1 | 1 | 1 | 29µs | 29µs | BEGIN@30 | Sympa::Spool::Task::
1 | 1 | 1 | 19µs | 125µs | BEGIN@27 | Sympa::Spool::Task::
1 | 1 | 1 | 17µs | 56µs | BEGIN@42 | Sympa::Spool::Task::
1 | 1 | 1 | 17µs | 212µs | BEGIN@32 | Sympa::Spool::Task::
1 | 1 | 1 | 13µs | 46µs | BEGIN@40 | Sympa::Spool::Task::
2 | 2 | 1 | 10µs | 10µs | _directories | Sympa::Spool::Task::
1 | 1 | 1 | 10µs | 165µs | BEGIN@38 | Sympa::Spool::Task::
1 | 1 | 1 | 8µs | 38µs | BEGIN@41 | Sympa::Spool::Task::
1 | 1 | 1 | 3µs | 3µs | CORE:qr (opcode) | Sympa::Spool::Task::
2 | 2 | 1 | 1µs | 1µs | __ANON__ (xsub) | Sympa::Spool::Task::
1 | 1 | 1 | 500ns | 500ns | _marshal_format (xsub) | Sympa::Spool::Task::
0 | 0 | 0 | 0s | 0s | quarantine | Sympa::Spool::Task::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | # -*- indent-tabs-mode: nil; -*- | ||||
2 | # vim:ft=perl:et:sw=4 | ||||
3 | # $Id$ | ||||
4 | |||||
5 | # Sympa - SYsteme de Multi-Postage Automatique | ||||
6 | # | ||||
7 | # Copyright 2018, 2020 The Sympa Community. See the AUTHORS.md | ||||
8 | # file at the top-level directory of this distribution and at | ||||
9 | # <https://github.com/sympa-community/sympa.git>. | ||||
10 | # | ||||
11 | # This program is free software; you can redistribute it and/or modify | ||||
12 | # it under the terms of the GNU General Public License as published by | ||||
13 | # the Free Software Foundation; either version 2 of the License, or | ||||
14 | # (at your option) any later version. | ||||
15 | # | ||||
16 | # This program is distributed in the hope that it will be useful, | ||||
17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
19 | # GNU General Public License for more details. | ||||
20 | # | ||||
21 | # You should have received a copy of the GNU General Public License | ||||
22 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
23 | |||||
24 | package Sympa::Spool::Task; | ||||
25 | |||||
26 | 2 | 90µs | 2 | 68µs | # spent 53µs (38+15) within Sympa::Spool::Task::BEGIN@26 which was called:
# once (38µs+15µs) by Sympa::Spindle::new at line 26 # spent 53µs making 1 call to Sympa::Spool::Task::BEGIN@26
# spent 15µs making 1 call to strict::import |
27 | 2 | 49µs | 2 | 231µs | # spent 125µs (19+106) within Sympa::Spool::Task::BEGIN@27 which was called:
# once (19µs+106µs) by Sympa::Spindle::new at line 27 # spent 125µs making 1 call to Sympa::Spool::Task::BEGIN@27
# spent 106µs making 1 call to warnings::import |
28 | |||||
29 | 2 | 51µs | 2 | 32µs | # spent 31µs (30+800ns) within Sympa::Spool::Task::BEGIN@29 which was called:
# once (30µs+800ns) by Sympa::Spindle::new at line 29 # spent 31µs making 1 call to Sympa::Spool::Task::BEGIN@29
# spent 800ns making 1 call to Sympa::Spool::Task::__ANON__ |
30 | 2 | 68µs | 2 | 30µs | # spent 29µs (29+500ns) within Sympa::Spool::Task::BEGIN@30 which was called:
# once (29µs+500ns) by Sympa::Spindle::new at line 30 # spent 29µs making 1 call to Sympa::Spool::Task::BEGIN@30
# spent 500ns making 1 call to Sympa::Spool::Task::__ANON__ |
31 | |||||
32 | 2 | 134µs | 2 | 407µs | # spent 212µs (17+195) within Sympa::Spool::Task::BEGIN@32 which was called:
# once (17µs+195µs) by Sympa::Spindle::new at line 32 # spent 212µs making 1 call to Sympa::Spool::Task::BEGIN@32
# spent 195µs making 1 call to base::import |
33 | |||||
34 | # spent 10µs within Sympa::Spool::Task::_directories which was called 2 times, avg 5µs/call:
# once (9µs+0s) by Sympa::Spool::new at line 60 of /usr/local/libexec/sympa/Sympa/Spool.pm
# once (1µs+0s) by Sympa::Spool::_create at line 84 of /usr/local/libexec/sympa/Sympa/Spool.pm | ||||
35 | 2 | 18µs | return {directory => $Conf::Conf{'queuetask'},}; | ||
36 | } | ||||
37 | |||||
38 | 2 | 55µs | 2 | 320µs | # spent 165µs (10+155) within Sympa::Spool::Task::BEGIN@38 which was called:
# once (10µs+155µs) by Sympa::Spindle::new at line 38 # spent 165µs making 1 call to Sympa::Spool::Task::BEGIN@38
# spent 155µs making 1 call to constant::import |
39 | |||||
40 | 2 | 32µs | 2 | 80µs | # spent 46µs (13+33) within Sympa::Spool::Task::BEGIN@40 which was called:
# once (13µs+33µs) by Sympa::Spindle::new at line 40 # spent 46µs making 1 call to Sympa::Spool::Task::BEGIN@40
# spent 33µs making 1 call to constant::import |
41 | 2 | 249µs | 2 | 68µs | # spent 38µs (8+30) within Sympa::Spool::Task::BEGIN@41 which was called:
# once (8µs+30µs) by Sympa::Spindle::new at line 41 # spent 38µs making 1 call to Sympa::Spool::Task::BEGIN@41
# spent 30µs making 1 call to constant::import |
42 | 1 | 400ns | # spent 56µs (17+39) within Sympa::Spool::Task::BEGIN@42 which was called:
# once (17µs+39µs) by Sympa::Spindle::new at line 43 | ||
43 | 1 | 733µs | 3 | 94µs | qr{\A(\d+)[.](\w*)[.](\w+)[.](?:([^\s\@]*)\@([\w\.\-*]*)|_global)\z}; # spent 56µs making 1 call to Sympa::Spool::Task::BEGIN@42
# spent 35µs making 1 call to constant::import
# spent 3µs making 1 call to Sympa::Spool::Task::CORE:qr |
44 | |||||
45 | # spent 7.27ms within Sympa::Spool::Task::_filter which was called 2300 times, avg 3µs/call:
# 1150 times (3.85ms+0s) by Sympa::Spool::next at line 155 of /usr/local/libexec/sympa/Sympa/Spool.pm, avg 3µs/call
# 1150 times (3.42ms+0s) by Sympa::Spool::next at line 152 of /usr/local/libexec/sympa/Sympa/Spool.pm, avg 3µs/call | ||||
46 | 2300 | 706µs | my $self = shift; | ||
47 | 2300 | 398µs | my $metadata = shift; | ||
48 | |||||
49 | 2300 | 1.10ms | return undef unless $metadata and defined $metadata->{date}; | ||
50 | 2300 | 6.08ms | return 0 if time < $metadata->{date}; | ||
51 | return 1; | ||||
52 | } | ||||
53 | |||||
54 | # spent 33.3s (1.23ms+33.3) within Sympa::Spool::Task::_load which was called 115 times, avg 290ms/call:
# 115 times (1.23ms+33.3s) by Sympa::Spool::next at line 124 of /usr/local/libexec/sympa/Sympa/Spool.pm, avg 290ms/call | ||||
55 | 115 | 41µs | my $self = shift; | ||
56 | |||||
57 | 115 | 350µs | 115 | 33.3s | unless ($self->{_glob_pattern}) { # spent 33.3s making 115 calls to Sympa::Spool::Task::_create_all_tasks, avg 289ms/call |
58 | $self->_create_all_tasks(); | ||||
59 | } | ||||
60 | 115 | 671µs | 115 | 28.2ms | $self->SUPER::_load(); # spent 28.2ms making 115 calls to Sympa::Spool::_load, avg 246µs/call |
61 | } | ||||
62 | |||||
63 | sub quarantine { | ||||
64 | my $self = shift; | ||||
65 | my $handle = shift; | ||||
66 | |||||
67 | $self->remove($handle); | ||||
68 | } | ||||
69 | |||||
70 | # Private function to create all necessary tasks. | ||||
71 | # spent 33.3s (51.4ms+33.2) within Sympa::Spool::Task::_create_all_tasks which was called 115 times, avg 289ms/call:
# 115 times (51.4ms+33.2s) by Sympa::Spool::Task::_load at line 57, avg 289ms/call | ||||
72 | 115 | 42µs | my $self = shift; | ||
73 | |||||
74 | 115 | 63µs | my $current_date = time; | ||
75 | |||||
76 | 115 | 291µs | 115 | 2.83s | my $existing_tasks = $self->_existing_tasks; # spent 2.83s making 115 calls to Sympa::Spool::Task::_existing_tasks, avg 24.6ms/call |
77 | |||||
78 | # Create global tasks. | ||||
79 | 115 | 457µs | foreach my $model (keys %{Sympa::Task::site_models()}) { | ||
80 | 1150 | 343µs | next if ${$existing_tasks->{'*'} || {}}{$model}; | ||
81 | |||||
82 | my $task = $self->_generator->new( | ||||
83 | context => '*', | ||||
84 | date => $current_date, | ||||
85 | model => $model | ||||
86 | ); | ||||
87 | next unless $task; | ||||
88 | $self->store($task); | ||||
89 | } | ||||
90 | |||||
91 | # Create list tasks. | ||||
92 | 115 | 952µs | 115 | 67.3ms | foreach my $robot (Sympa::List::get_robots()) { # spent 67.3ms making 115 calls to Sympa::List::get_robots, avg 585µs/call |
93 | 345 | 781µs | 345 | 28.9s | my $all_lists = Sympa::List::get_lists($robot); # spent 28.9s making 345 calls to Sympa::List::get_lists, avg 83.8ms/call |
94 | |||||
95 | 345 | 658µs | foreach my $list (@{$all_lists || []}) { | ||
96 | 1491 | 3.30ms | foreach my $model (keys %{Sympa::Task::list_models()}) { | ||
97 | 2982 | 6.74ms | 2982 | 5.81ms | next if ${$existing_tasks->{$list->get_id} || {}}{$model}; # spent 5.81ms making 2982 calls to Sympa::List::get_id, avg 2µs/call |
98 | |||||
99 | 2982 | 1.96ms | next unless $list->{'admin'}{'status'} eq 'open'; | ||
100 | 2754 | 852µs | if ($model eq 'sync_include') { | ||
101 | # Create tasks only when they are required. | ||||
102 | next | ||||
103 | 1377 | 4.31ms | 2754 | 1.09s | unless $list->has_data_sources # spent 1.07s making 1377 calls to Sympa::List::has_included_users, avg 775µs/call
# spent 18.4ms making 1377 calls to Sympa::List::has_data_sources, avg 13µs/call |
104 | or $list->has_included_users; | ||||
105 | } | ||||
106 | |||||
107 | 1377 | 7.39ms | 2754 | 313ms | my $task = $self->_generator->new( # spent 312ms making 1377 calls to Sympa::Task::new, avg 226µs/call
# spent 826µs making 1377 calls to Sympa::Spool::Task::_generator, avg 600ns/call |
108 | context => $list, | ||||
109 | date => $current_date, | ||||
110 | model => $model | ||||
111 | ); | ||||
112 | 1377 | 708µs | next unless $task; | ||
113 | $self->store($task); | ||||
114 | } | ||||
115 | } | ||||
116 | } | ||||
117 | } | ||||
118 | |||||
119 | # Private function to list all existing tasks. | ||||
120 | # Old name: Sympa::Task::list_tasks(). | ||||
121 | # spent 2.83s (18.0ms+2.81) within Sympa::Spool::Task::_existing_tasks which was called 115 times, avg 24.6ms/call:
# 115 times (18.0ms+2.81s) by Sympa::Spool::Task::_create_all_tasks at line 76, avg 24.6ms/call | ||||
122 | 115 | 46µs | my $self = shift; | ||
123 | |||||
124 | 115 | 71µs | my $existing_tasks = {}; | ||
125 | |||||
126 | # Get all entries. | ||||
127 | 115 | 281µs | 115 | 34.2ms | $self->{_metadatas} = $self->SUPER::_load() # spent 34.2ms making 115 calls to Sympa::Spool::_load, avg 298µs/call |
128 | or return {}; | ||||
129 | 115 | 25µs | while (1) { | ||
130 | 1265 | 2.76ms | 1265 | 0s | my ($task, $handle) = $self->next(no_filter => 1, no_lock => 1); # spent 2.78s making 1265 calls to Sympa::Spool::next, avg 2.20ms/call, recursion: max depth 1, sum of overlapping time 2.78s |
131 | |||||
132 | 1265 | 5.66ms | if ($task and $handle) { | ||
133 | my $id = | ||||
134 | (ref $task->{context} eq 'Sympa::List') | ||||
135 | ? $task->{context}->get_id | ||||
136 | 1150 | 1.10ms | : '*'; | ||
137 | 1150 | 434µs | my $model = $task->{model}; | ||
138 | |||||
139 | 1150 | 1.18ms | $existing_tasks->{$id}{$model} = 1; | ||
140 | } elsif ($handle) { | ||||
141 | next; | ||||
142 | } else { | ||||
143 | 115 | 73µs | last; | ||
144 | } | ||||
145 | } | ||||
146 | |||||
147 | 115 | 294µs | return $existing_tasks; | ||
148 | } | ||||
149 | |||||
150 | 1 | 3µs | 1; | ||
151 | __END__ | ||||
# spent 3µs within Sympa::Spool::Task::CORE:qr which was called:
# once (3µs+0s) by Sympa::Spool::Task::BEGIN@42 at line 43 | |||||
sub Sympa::Spool::Task::__ANON__; # xsub | |||||
# spent 1.47ms within Sympa::Spool::Task::_generator which was called 2528 times, avg 580ns/call:
# 1377 times (826µs+0s) by Sympa::Spool::Task::_create_all_tasks at line 107, avg 600ns/call
# 1150 times (638µs+0s) by Sympa::Spool::next at line 162 of /usr/local/libexec/sympa/Sympa/Spool.pm, avg 555ns/call
# once (500ns+0s) by Sympa::Spool::new at line 56 of /usr/local/libexec/sympa/Sympa/Spool.pm | |||||
# spent 500ns within Sympa::Spool::Task::_marshal_format which was called:
# once (500ns+0s) by Sympa::Spool::new at line 73 of /usr/local/libexec/sympa/Sympa/Spool.pm | |||||
# spent 896µs within Sympa::Spool::Task::_marshal_keys which was called 2301 times, avg 389ns/call:
# 2300 times (896µs+0s) by Sympa::Spool::unmarshal at line 283 of /usr/local/libexec/sympa/Sympa/Spool.pm, avg 389ns/call
# once (400ns+0s) by Sympa::Spool::new at line 73 of /usr/local/libexec/sympa/Sympa/Spool.pm | |||||
# spent 1.48ms within Sympa::Spool::Task::_marshal_regexp which was called 2300 times, avg 643ns/call:
# 2300 times (1.48ms+0s) by Sympa::Spool::unmarshal at line 283 of /usr/local/libexec/sympa/Sympa/Spool.pm, avg 643ns/call |