← Index
NYTProf Performance Profile   « line view »
For /usr/local/libexec/sympa/task_manager-debug.pl
  Run on Tue Jun 1 22:32:51 2021
Reported on Tue Jun 1 22:35:15 2021

Filename/usr/local/libexec/sympa/Sympa/Spool/Task.pm
StatementsExecuted 32991 statements in 51.6ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1151151.4ms33.3sSympa::Spool::Task::::_create_all_tasksSympa::Spool::Task::_create_all_tasks
1151118.0ms2.83sSympa::Spool::Task::::_existing_tasksSympa::Spool::Task::_existing_tasks
2300217.27ms7.27msSympa::Spool::Task::::_filterSympa::Spool::Task::_filter
2300111.48ms1.48msSympa::Spool::Task::::_marshal_regexpSympa::Spool::Task::_marshal_regexp (xsub)
2528321.47ms1.47msSympa::Spool::Task::::_generatorSympa::Spool::Task::_generator (xsub)
115111.23ms33.3sSympa::Spool::Task::::_loadSympa::Spool::Task::_load
230121896µs896µsSympa::Spool::Task::::_marshal_keysSympa::Spool::Task::_marshal_keys (xsub)
11138µs53µsSympa::Spool::Task::::BEGIN@26Sympa::Spool::Task::BEGIN@26
11130µs31µsSympa::Spool::Task::::BEGIN@29Sympa::Spool::Task::BEGIN@29
11129µs29µsSympa::Spool::Task::::BEGIN@30Sympa::Spool::Task::BEGIN@30
11119µs125µsSympa::Spool::Task::::BEGIN@27Sympa::Spool::Task::BEGIN@27
11117µs56µsSympa::Spool::Task::::BEGIN@42Sympa::Spool::Task::BEGIN@42
11117µs212µsSympa::Spool::Task::::BEGIN@32Sympa::Spool::Task::BEGIN@32
11113µs46µsSympa::Spool::Task::::BEGIN@40Sympa::Spool::Task::BEGIN@40
22110µs10µsSympa::Spool::Task::::_directoriesSympa::Spool::Task::_directories
11110µs165µsSympa::Spool::Task::::BEGIN@38Sympa::Spool::Task::BEGIN@38
1118µs38µsSympa::Spool::Task::::BEGIN@41Sympa::Spool::Task::BEGIN@41
1113µs3µsSympa::Spool::Task::::CORE:qrSympa::Spool::Task::CORE:qr (opcode)
2211µs1µsSympa::Spool::Task::::__ANON__Sympa::Spool::Task::__ANON__ (xsub)
111500ns500nsSympa::Spool::Task::::_marshal_formatSympa::Spool::Task::_marshal_format (xsub)
0000s0sSympa::Spool::Task::::quarantineSympa::Spool::Task::quarantine
Call graph for these subroutines as a Graphviz dot language file.
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
24package Sympa::Spool::Task;
25
26290µs268µ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
use strict;
# spent 53µs making 1 call to Sympa::Spool::Task::BEGIN@26 # spent 15µs making 1 call to strict::import
27249µs2231µ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
use warnings;
# spent 125µs making 1 call to Sympa::Spool::Task::BEGIN@27 # spent 106µs making 1 call to warnings::import
28
29251µs232µ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
use Conf;
# spent 31µs making 1 call to Sympa::Spool::Task::BEGIN@29 # spent 800ns making 1 call to Sympa::Spool::Task::__ANON__
30268µs230µ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
use Sympa::List;
# spent 29µs making 1 call to Sympa::Spool::Task::BEGIN@30 # spent 500ns making 1 call to Sympa::Spool::Task::__ANON__
31
322134µs2407µ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
use base qw(Sympa::Spool);
# 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
sub _directories {
35218µs return {directory => $Conf::Conf{'queuetask'},};
36}
37
38255µs2320µ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
use constant _generator => 'Sympa::Task';
# spent 165µs making 1 call to Sympa::Spool::Task::BEGIN@38 # spent 155µs making 1 call to constant::import
39
40232µs280µ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
use constant _marshal_format => '%ld.%s.%s.%s@%s';
# spent 46µs making 1 call to Sympa::Spool::Task::BEGIN@40 # spent 33µs making 1 call to constant::import
412249µs268µ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
use constant _marshal_keys => [qw(date label model localpart domainpart)];
# spent 38µs making 1 call to Sympa::Spool::Task::BEGIN@41 # spent 30µs making 1 call to constant::import
421400ns
# 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
use constant _marshal_regexp =>
431733µs394µ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
sub _filter {
462300706µs my $self = shift;
472300398µs my $metadata = shift;
48
4923001.10ms return undef unless $metadata and defined $metadata->{date};
5023006.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
sub _load {
5511541µs my $self = shift;
56
57115350µs11533.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 }
60115671µs11528.2ms $self->SUPER::_load();
# spent 28.2ms making 115 calls to Sympa::Spool::_load, avg 246µs/call
61}
62
63sub 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
sub _create_all_tasks {
7211542µs my $self = shift;
73
7411563µs my $current_date = time;
75
76115291µs1152.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.
79115457µs foreach my $model (keys %{Sympa::Task::site_models()}) {
801150343µ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.
92115952µs11567.3ms foreach my $robot (Sympa::List::get_robots()) {
# spent 67.3ms making 115 calls to Sympa::List::get_robots, avg 585µs/call
93345781µs34528.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
95345658µs foreach my $list (@{$all_lists || []}) {
9614913.30ms foreach my $model (keys %{Sympa::Task::list_models()}) {
9729826.74ms29825.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
9929821.96ms next unless $list->{'admin'}{'status'} eq 'open';
1002754852µs if ($model eq 'sync_include') {
101 # Create tasks only when they are required.
102 next
10313774.31ms27541.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
10713777.39ms2754313ms 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 );
1121377708µ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
sub _existing_tasks {
12211546µs my $self = shift;
123
12411571µs my $existing_tasks = {};
125
126 # Get all entries.
127115281µs11534.2ms $self->{_metadatas} = $self->SUPER::_load()
# spent 34.2ms making 115 calls to Sympa::Spool::_load, avg 298µs/call
128 or return {};
12911525µs while (1) {
13012652.76ms12650s 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
13212655.66ms if ($task and $handle) {
133 my $id =
134 (ref $task->{context} eq 'Sympa::List')
135 ? $task->{context}->get_id
13611501.10ms : '*';
1371150434µs my $model = $task->{model};
138
13911501.18ms $existing_tasks->{$id}{$model} = 1;
140 } elsif ($handle) {
141 next;
142 } else {
14311573µs last;
144 }
145 }
146
147115294µs return $existing_tasks;
148}
149
15013µs1;
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::CORE:qr; # opcode
# spent 1µs within Sympa::Spool::Task::__ANON__ which was called 2 times, avg 650ns/call: # once (800ns+0s) by Sympa::Spool::Task::BEGIN@29 at line 29 # once (500ns+0s) by Sympa::Spool::Task::BEGIN@30 at line 30
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
sub Sympa::Spool::Task::_generator; # xsub
# 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
sub Sympa::Spool::Task::_marshal_format; # xsub
# 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
sub Sympa::Spool::Task::_marshal_keys; # xsub
# 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
sub Sympa::Spool::Task::_marshal_regexp; # xsub