Files
ase_perl/SendFtpElabData.pl

199 lines
6.0 KiB
Perl
Executable File

#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use Getopt::Long;
use Net::FTP;
use Data::Dumper qw(Dumper);
$|++; # Autoflush
my $username = 'ase_lar';
my $password = 'laravel';
my $db_name = 'ase_lar';
my $server = 'localhost';
my $matlab_timestamp;
my $ftp_send = 1;
my $ftp_addrs;
my $ftp_user;
my $ftp_passwd;
my $ftp_parm;
my $ftp_filename;
my $ftp_target;
my $duedate = '';
my ( $unit, $tool );
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";
}
if ( defined $p1 and $p1 eq "db_ts" ) {
$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 trxelab {
my $dbh =
DBI->connect( "DBI:mysql:$db_name;host=$server", $username, $password )
or die getTimeStamp("log")
. " - pid $$ >> Could not connect to database: $DBI::errstr";
my $sth = $dbh->prepare(
'select ftp_addrs, ftp_user, ftp_passwd, ftp_parm, ftp_filename, ftp_target, duedate from units
where name = "' . $unit . '";'
) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
$sth->execute();
if ( $sth->rows eq 0 ) {
die getTimeStamp("log") . " - pid $$ >> No unit ftp params selected.\n";
}
else {
while ( my $results = $sth->fetchrow_hashref ) {
$ftp_addrs = $results->{'ftp_addrs'};
$ftp_user = $results->{'ftp_user'};
$ftp_passwd = $results->{'ftp_passwd'};
$ftp_parm = $results->{'ftp_parm'};
$ftp_filename = $results->{'ftp_filename'};
$ftp_target = $results->{'ftp_target'};
$duedate = $results->{'duedate'};
}
}
$sth->finish;
# Disconnect
my $fileelab;
if ( $ftp_filename eq "" ) {
$fileelab =
'/var/lib/mysql-files/'
. $tool . '_'
. getTimeStamp()
. '.csv'; #mettere quello che si prende da query *** aggiungere $unit
}
else {
$ftp_filename =~ s/(\$\w+)/$1/eeg;
$ftp_filename =~ s/\s/_/g;
$fileelab =
'/var/lib/mysql-files/'
. $ftp_filename . '_'
. getTimeStamp() . '.csv';
}
my $sthdo = $dbh->do(
qq{
select * from (
select 'ToolNameID', 'EventDate', 'EventTime', 'NodeNum', 'NodeType', 'NodeDepth',
'XShift', 'YShift', 'ZShift' , 'X', 'Y', 'Z', 'HShift', 'HShiftDir', 'HShift_local',
'speed', 'speed_local', 'acceleration', 'acceleration_local', 'T_node', 'water_level', 'pressure', 'load_value', 'AlfaX', 'AlfaY', 'CalcErr'
union all
select ToolNameID, EventDate, EventTime, NodeNum, NodeType, NodeDepth,
XShift, YShift, ZShift , X, Y, Z, HShift, HShiftDir, HShift_local,
speed, speed_local, acceleration, acceleration_local, T_node, water_level, pressure, load_value, AlfaX, AlfaY, calcerr
from elabdataview
where UnitName = '$unit' and ToolNameID = '$tool' and updated_at > '$matlab_timestamp'
order by ToolNameID DESC, EventDate, EventTime, convert(`NodeNum`, UNSIGNED INTEGER) DESC
) resulting_set
into outfile '$fileelab'
fields terminated by ',' optionally enclosed by '"' lines terminated by '\n'}
) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
$dbh->disconnect;
$ftp_parm //= "";
$ftp_parm =~ s/\s//g;
my %ftp_parms = ( 'Host' => $ftp_addrs, );
$ftp_parms{'Debug'} = 0;
$ftp_parms{'Passive'} = 1;
foreach my $parm ( split( /,/, $ftp_parm ) ) {
my ( $key, $val ) = split( /=>/, $parm );
$ftp_parms{$key} = $val;
}
print getTimeStamp("log") . " - pid $$ >> $unit - $tool ftp parm:\n";
while ( my ( $key, $value ) = each(%ftp_parms) ) {
print getTimeStamp("log")
. " - pid $$ >> $key = $ftp_parms{$key}\n";
}
if ( !defined $duedate
or ( $duedate eq '0000-00-00 00:00:00' )
or ( $duedate eq '' )
or ( $duedate gt getTimeStamp("db_ts") ) )
{
my $ftp = Net::FTP->new(%ftp_parms)
or die getTimeStamp("log")
. " - pid $$ >> Cannot connect to $ftp_addrs: $@ \n";
$ftp->starttls() if exists $ftp_parms{'SSL_version'};
$ftp->login( $ftp_user, $ftp_passwd )
or die getTimeStamp("log")
. " - pid $$ >> Cannot login "
. $ftp->message . "\n";
$ftp_target //= "";
if ( $ftp_target ne "" ) {
$ftp->cwd($ftp_target)
or die getTimeStamp("log")
. " - pid $$ >> Change remote dir failed "
. $ftp->message . "\n";
}
print getTimeStamp("log")
. " - pid $$ >> ftp target: "
. $ftp->pwd() . ".\n";
$ftp->put($fileelab)
or die getTimeStamp("log")
. " - pid $$ >> Put failed: "
. $ftp->message . "\n";
print getTimeStamp("log")
. " - pid $$ >> ftp target lists "
. scalar @{ $ftp->ls() }
. " elements.\n";
$ftp->quit;
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool: $fileelab ftp put executed.\n";
}
else {
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool: $fileelab ftp put didn't executed because due date reached.\n";
}
return;
}
my $starttime = getTimeStamp("log");
print "$starttime - pid $$ >> Start execution.\n";
GetOptions(
"matlabts=s" => \$matlab_timestamp,
"unit=s" => \$unit,
"tool=s" => \$tool
) or die("Error in command line arguments\n");
print getTimeStamp("log")
. " - pid $$ >> Send via FTP elab data for $unit - $tool.\n";
if ( $tool eq 'DT0076' ) {
sleep(600);
}
trxelab();
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit;