package MGA::Mirrors::Controller::Graph; use Moose; use namespace::autoclean; BEGIN {extends 'Catalyst::Controller'; } =head1 NAME MGA::Mirrors::Controller::Graph - Catalyst Controller =head1 DESCRIPTION Catalyst Controller. =head1 METHODS =cut =head2 index =cut sub index :Path :Args(0) { my ( $self, $c ) = @_; my $mirror_list = $c->model('Mirrors')->find_mirrors; my $graph = GraphViz->new(layout => 'dot', overlap => 'orthoxy', rankdir => 1); my %node; my %edge; foreach (@{$mirror_list || []}) { $node{$_->{hostname}} = $_; if ($_->{syncfrom}) { $edge{$_->{syncfrom}}{$_->{hostname}} = 1; } } my %nodadded; foreach my $from (keys %edge) { foreach my $to (keys %{ $edge{$from} ||{}}) { foreach ($from, $to) { if (!$nodadded{$_}) { $graph->add_node($_, shape => 'box', cluster => $node{$_}{country}); } } $graph->add_edge($from, $to); } } $c->stash->{graphviz}->{graph} = $graph; } sub end : Private { my ($self, $c) = @_; $c->view('GraphViz')->process($c); $c->model('Mirrors')->db->rollback; } =head1 AUTHOR Olivier Thauvin =head1 LICENSE This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut __PACKAGE__->meta->make_immutable; 1;