modifiche per receive su aruba

This commit is contained in:
2018-07-05 22:06:32 +02:00
parent a338f199ea
commit dd9b3165f2

View File

@@ -0,0 +1,120 @@
#!/usr/bin/perl
use warnings;
use strict;
use Getopt::Long;
use File::SmartTail;
use File::Basename qw( fileparse );
use File::Path qw( make_path );
use File::Copy qw( move );
use Net::FTP;
use POSIX;
$SIG{CHLD} = 'IGNORE';
$|++; # Autoflush
sub getTimeStamp
{ # parm [ts] => timestamp for filename; log => timestamp for log
my $format = "%04d%02d%02d%02d%02d%02d";
my ($p1) = @_;
if ( defined $p1 and $p1 eq "log" ) {
$format = "%04d%02d%02d %02d:%02d:%02d";
}
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
localtime(time);
my $timestamp =
sprintf( $format, $year + 1900, $mon + 1, $mday, $hour, $min, $sec );
return $timestamp;
}
sub getUnitName { # parm => file received ($trfile)
my ($filename) = @_;
my ( $fileDate, $fileTime );
my ( $unittype, $unit );
my ( $filenamecsv, $path, $suffix ) = fileparse( $filename, qr/\.[^.]*/ );
if ( $filenamecsv =~ m/^(\d\d_\d\d\d\d_|)(\d\d\d\d\d\d\d\d\d\d\d\d\d\d_)(G201_ID\d\d\d\d_DT\d\d\d\d)$/i ) { # GD201
my @strings = $filenamecsv =~ /(.{1,4})(.{1,2})(.{1,2})(.{1,2})(.{1,2})(.{1,2})_(.{1,4})_(.{1,6})_(.{1,6}).*/;
$fileDate = $strings[0] . "/" . $strings[1] . "/" . $strings[2];;
$fileTime = $strings[3] . ":" . $strings[4] . ":" . $strings[5];
$unittype = $strings[6];
$unit = $strings[7];
} else {
open FILE, $filename
or warn getTimeStamp("log") . " >> Error: opening input file $filename\n";
( $fileDate, $fileTime ) = split( /\s/, <FILE> );
( $unittype, $unit ) = split( /\s/, uc <FILE> );
$unit =~ s/;+$//;
close FILE;
}
return $unit;
}
my $readingFile;
my $ftpuser = "aseftp";
my $ftpuser1 = "asega";
my $recvOKstr = "OK UPLOAD";
my $ext = ".csv";
my $hostname = "160.78.21.55";
my $username = 'asega';
my $password = 'mums';
GetOptions( "file=s" => \$readingFile )
or die("Error in command line arguments\n");
my($scriptname, $scriptpath) = fileparse($0);
my $tail = new File::SmartTail;
$tail->WatchFile( -file => $readingFile, -type => "UNIX", -timeout => '10' );
while ( my $line = $tail->GetLine() ) {
if (((index($line, $ftpuser) != -1) or (index($line, $ftpuser1) != -1)) and (index($line, $recvOKstr) != -1)) {
my (undef, undef, undef, $truser, undef, $trip, undef, $trfile, $trstat) = split(/[\"\[\]]/, $line);
my ($login,$pass,$uid,$gid) = getpwnam($truser) or warn getTimeStamp("log") . " >> $truser not in passwd file.\n";
my($filename, $path, $suffix) = fileparse($trfile, qr/\.[^.]*/);
if ( ((uc $suffix) eq (uc $ext))
and
( $filename =~ m/^(\d\d_\d\d\d\d_|)(DT\d\d\d\d|LOC\d*|GD\d*)$/i
or $filename =~ m/^(\d\d_\d\d\d\d_|)(\d\d\d\d\d\d\d\d\d\d\d\d\d\d_)(G201_ID\d\d\d\d_DT\d\d\d\d)$/i) )
{
my $unit = getUnitName($trfile);
print getTimeStamp("log") . " >> Unit $unit - Filename $trfile\n";
my $outpath = $path . $unit . "/received";
my $trnpath = $path . $unit . "/transmitted";
if ( !-d "$outpath" ) {
make_path "$outpath" , {mode => 0755, owner=>$truser, group=>$truser} or warn getTimeStamp("log") . " >> Failed to create path: $outpath";
}
if ( !-d "$trnpath" ) {
make_path "$trnpath" , {mode => 0755, owner=>$truser, group=>$truser} or warn getTimeStamp("log") . " >> Failed to create path: $trnpath";
}
my $timestamp = getTimeStamp();
my $dest = $outpath . "/" . $filename . "_". $timestamp . $suffix;
my $send = $trnpath . "/" . $filename . "_". $timestamp . $suffix;
if ( !move $trfile, $dest) {
warn getTimeStamp("log") . " >> Move $trfile -> $dest failed: $!";
} else {
print getTimeStamp("log") . " >> Moved $trfile -> $dest.\n";
chmod 0664 , $dest;
my @fname = ($dest);
chown $uid, $gid, @fname;
}
my $ftp = Net::FTP->new($hostname, Timeout => 20, Debug => 1, Passive => 0)
or warn getTimeStamp("log") . " >> Cannot connect to $hostname: $@";
if ($ftp->login($username,$password)) {
if ($ftp->put($dest, $filename . $suffix)) {
if ( !move $dest, $send) {
warn getTimeStamp("log") . " >> Move $dest -> $send failed: $!";
} else {
print getTimeStamp("log") . " >> Moved $dest -> $send.\n";
}
} else {
warn getTimeStamp("log") . " >> Put $dest failed ", $ftp->message;
}
} else {
warn getTimeStamp("log") . " >> Cannot login ", $ftp->message;
}
}
}
}
exit(0);