use File::Slurp;
use Data::Dump qw(dump);
+my $dot;
+sub dot {
+ $dot .= join("\n",@_) . "\n";
+ warn "DOT ",@_,$/;
+}
+
sub print_job {
- return unless @_;
- print "JOB ",dump(@_),$/;
+ my ( $name, $job ) = @_;
+ warn "JOB $name ",dump($job),$/;
+
+ return unless exists $job->{task};
+
+ $name = $job->{name};
+
+ foreach my $taskset ( keys %{ $job->{task} } ) {
+ dot "subgraph ${name}_$taskset {";
+ my @t = @{ $job->{task}->{$taskset} };
+ my $wait = $t[$#t] eq 'wait' && pop @t;
+ foreach my $f ( @t ) {
+ dot qq|"$name" -> "$f"|;
+ dot qq|"$f" -> "${name}_wait"| if $wait;
+ }
+ dot "} //subgraph";
+ }
}
find(sub {
}
} elsif ( m/\$self->(do\w*)\(\s*'(\w+)'/ ) {
push @{ $job->{$1} }, $2;
+ dot qq|"$job->{name}" -> "$2" [ label="$1" ]|;
}
}
print_job $name => $job;
}, 'lib');
+
+print $dot;
+
+open(my $d, '|-', 'dot -Tpng -o public/gearman.png');
+print $d "digraph {\n$dot\n}\n";
+close($d);