use lib (
'/home/raj/perl5/lib/perl5',
'/home/raj/apps/HILIS4/lib',
);
use LIMS::Local::Utils;
use Data::Printer alias => ddp;
use Modern::Perl;
use Net::FTP;
use IO::All;
use constant LOGFILE => '/home/raj/crons/genomics_transfer.log';
my $timestamp = LIMS::Local::Utils::time_now();
my $local_filename = '219_2016_0810_150003.xml';
{
my %params = (
local_filename => '/tmp/' . $local_filename,
remote_filename => $local_filename,
server_addr => '163.160.107.109',
username => 'HMDS',
password => 'dmw@kY4jzu$Hx5p',
cwd => 'HILIS_GEL', # destination_dir for genomics data
passive_mode => 1,
ascii_mode => 1,
); # ddp \%params;
# ftp file (returns str on failure, undef on success):
my $rtn = ftp_file(\%params); # ddp $rtn;
if ($rtn) { # ddp $rtn;
say $rtn;
}
else {
my $msg = $timestamp->strftime('%Y-%m-%d %T') . ': '
. $local_filename . "\n"; say $msg;
io(LOGFILE)->append($msg);
}
}
sub ftp_file {
my $args = shift; # ddp $args; return;
# can pass timeout as arg, default is 60 seconds if no value specified;
# Timeout => $args->{timeout}
my $ftp = Net::FTP->new( $args->{server_addr}, Debug => 1 )
|| return "Cannot connect to $args->{server_addr}: $@";
if ($args->{username} && $args->{password}) {
$ftp->login(@{$args}{qw/username password/})
|| return 'Cannot login - ' . $ftp->message;
}
$ftp->binary() unless $args->{ascii_mode};
$ftp->passive(1) if $args->{passive_mode};
$ftp->cwd($args->{cwd}) if $args->{cwd};
$ftp->put($args->{local_filename}, $args->{remote_filename})
# need to return NOW, or err message() will be replaced by outcome of quit():
|| return 'FTP error - ' . $ftp->message;
$ftp->quit;
return 0; # don't return message() here - will be result of quit() eg 'goodbye'
}