8 use Data::Dump qw(dump);
12 $dot .= join("\n",@_) . "\n";
17 my ( $name, $job ) = @_;
18 warn "JOB $name ",dump($job),$/;
20 return unless exists $job->{task};
24 foreach my $taskset ( keys %{ $job->{task} } ) {
25 dot "subgraph ${name}_$taskset {";
26 my @t = @{ $job->{task}->{$taskset} };
27 my $wait = $t[$#t] eq 'wait' && pop @t;
28 foreach my $f ( @t ) {
29 dot qq|"$name" -> "$f"|;
30 dot qq|"$f" -> "${name}_wait"| if $wait;
39 open(my $fh, '<', $name);
43 if (/sub\s+(\w+)\s*:\s*Job/) {
44 print_job $name => $job;
45 $job = { name => $1 };
46 } elsif ( m/\$(\w+)->add_task\(\s*'(\w+)'/ ) {
47 push @{ $job->{task}->{$1} }, $2;
48 } elsif ( m/\$(\w+)->wait/ ) {
49 if ( exists $job->{task}->{$1} ) {
50 push @{ $job->{task}->{$1} }, 'wait';
52 } elsif ( m/\$self->(do\w*)\(\s*'(\w+)'/ ) {
53 push @{ $job->{$1} }, $2;
54 dot qq|"$job->{name}" -> "$2" [ label="$1" ]|;
57 print_job $name => $job;
62 open(my $d, '|-', 'dot -Tpng -o public/gearman.png');
63 print $d "digraph {\n$dot\n}\n";