MYDan
view release on metacpan or search on metacpan
lib/MYDan/Agent/GrsyncM.pm view on Meta::CPAN
$self{task} = [ +{
sp => $self{opt}{sp}, dp => ( $self{opt}{dp} =~ /\/$/ )
? $self{opt}{dp}.basename $self{opt}{sp}: $self{opt}{dp}
} ];
}
}
bless \%self, ref $class || $class;
}
sub run
{
my $this = shift;
my ( $opt, $sync, %failed ) = @$this{qw( opt sync )};
if( $this->{error} )
{
return wantarray ? @{$sync->{dst}} : $sync->{dst};
}
for my $task ( @{$this->{task}} )
{
print '-' x 60, "\n";
my $timeout = $opt->{timeout} - $this->{usetime};
print "sp:$task->{sp} => dp:$task->{dp}\n";
my @dst = grep{ ! $failed{$_} }@{$sync->{dst}};
last unless @dst;
if( $timeout < 0 )
{
map{ $failed{$_} ++ }@dst;
last;
}
my %sync = ( %$sync, dst => \@dst );
my $grsync = $opt->{4} ? MYDan::Agent::Grsync::V4->new ( %sync ):
$opt->{3} ? MYDan::Agent::Grsync::V3->new ( %sync ):
MYDan::Agent::Grsync::V12->new ( %sync );
my $time = time;
my @failed = $grsync->run( %$opt, %$task, timeout => $timeout )->failed();
$this->{usetime} += time - $time;
if( @failed )
{
print "failed:\n";
map{ $failed{$_}++; print "$_\n" }@failed;
}
}
print '=' x 60, "\n";
if( $this->{spIsDir} )
{
delete $ENV{MYDanExtractFile};
delete $ENV{MYDanExtractFileAim};
my %query = (
code => 'unzipdir', argv => +{ uuid => $this->{uuid},
path => [ $this->{opt}{dp} ], map{ $_ => $opt->{$_} }qw( delete chown chmod ) },
map{ $_ => $opt->{$_} }qw( user sudo ) );
my %result = MYDan::Agent::Client->new( @{$sync->{dst}} )
->run( %$opt, %{$sync->{agent}}, query => \%query );
print "untar.\n";
for my $node ( keys %result )
{
if( $result{$node} =~ s/--- 0\n$// )
{
print "$node: $result{$node}\n" if $result{$node};
}
else
{
print "$node: $result{$node}\n";
$failed{$node} = 1;
}
}
print '=' x 60, "\n";
print "clean dir.\n";
%query = (
code => 'cleandir', argv => +{ uuid => $this->{uuid},
path => [ $this->{opt}{sp}, $this->{opt}{dp} ], expire => 86400 },
map{ $_ => $this->{opt}{$_} }qw( user sudo ) );
%result = MYDan::Agent::Client->new( @{$sync->{src}}, @{$sync->{dst}} )
->run( %$opt, %{$sync->{agent}}, query => \%query );
for my $node ( keys %result )
{
unless( $result{$node} =~ s/--- 0\n$// )
{
print "[warn]$node: $result{$node}\n";
}
}
}
my @failed = keys %failed;
return wantarray ? @failed : \@failed;
}
1;
( run in 0.860 second using v1.01-cache-2.11-cpan-71847e10f99 )