This commit is contained in:
2020-09-05 09:15:50 +02:00
parent 8ca3c8629f
commit b5680e103c
2 changed files with 616 additions and 478 deletions

View File

@@ -24,7 +24,10 @@ my ( @CSVData, @sql );
my $outcount = 0; my $outcount = 0;
my $outfilenum = 0; my $outfilenum = 0;
my $maxsqllines = 10000; my $maxsqllines = 10000;
my ($tool, $toolbatt, $tooltemp, $tooltype, @channels,@NewData, @ain, @din, @nodetype, $GDEventDate); my (
$tool, $toolbatt, $tooltemp, $tooltype, @channels,
@NewData, @ain, @din, @nodetype, $GDEventDate
);
my $matlab_ip = "160.78.21.71"; my $matlab_ip = "160.78.21.71";
my $matlab_cmd = "matlab.cmd"; my $matlab_cmd = "matlab.cmd";
my $matlab_timestamp = ""; my $matlab_timestamp = "";
@@ -36,18 +39,19 @@ my $ftp_parm;
my $ftp_filename; my $ftp_filename;
my $ftp_target; my $ftp_target;
my $duedate = ''; my $duedate = '';
my ($unit_id, $unit, $unittype); my ( $unit_id, $unit, $unittype );
my ($fileDate, $fileTime); my ( $fileDate, $fileTime );
my $matlab_rt = "/usr/local/MATLAB/MATLAB_Runtime/v93"; my $matlab_rt = "/usr/local/MATLAB/MATLAB_Runtime/v93";
my $matlab_func_dir = "/usr/local/matlab_func/"; my $matlab_func_dir = "/usr/local/matlab_func/";
my $matlab_error = ''; my $matlab_error = '';
my $matlab_timeout = '1800'; my $matlab_timeout = '1800';
my $email_addr = 'andrea.carri@aseltd.eu,edoardo.cavalca@aseltd.eu,alessandro.battilani@gmail.com,alessandro.valletta@aseltd.eu'; my $email_addr =
my ($email_msg, $email_obj); 'andrea.carri@aseltd.eu,edoardo.cavalca@aseltd.eu,alessandro.battilani@gmail.com,alessandro.valletta@aseltd.eu';
my ( $email_msg, $email_obj );
my $G201_fcheck = 0; my $G201_fcheck = 0;
sub getTimeStamp
sub getTimeStamp{ # parm [ts] => timestamp for filename; log => timestamp for log { # parm [ts] => timestamp for filename; log => timestamp for log
my $format = "%04d%02d%02d%02d%02d%02d"; my $format = "%04d%02d%02d%02d%02d%02d";
my ($p1) = @_; my ($p1) = @_;
if ( defined $p1 and $p1 eq "log" ) { if ( defined $p1 and $p1 eq "log" ) {
@@ -56,29 +60,42 @@ sub getTimeStamp{ # parm [ts] => timestamp for filename; log => timestamp for
if ( defined $p1 and $p1 eq "db_ts" ) { if ( defined $p1 and $p1 eq "db_ts" ) {
$format = "%04d-%02d-%02d %02d:%02d:%02d"; $format = "%04d-%02d-%02d %02d:%02d:%02d";
} }
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =localtime(time); my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
my $timestamp =sprintf( $format, $year + 1900, $mon + 1, $mday, $hour, $min, $sec ); localtime(time);
my $timestamp =
sprintf( $format, $year + 1900, $mon + 1, $mday, $hour, $min, $sec );
return $timestamp; return $timestamp;
} }
sub writeOutSql { sub writeOutSql {
my ($tn) = @_; my ($tn) = @_;
my $outfile = $sqlout . "_" . $outfilenum++; my $outfile = $sqlout . "_" . $outfilenum++;
open SQLOUT, ">", $outfile open SQLOUT, ">", $outfile
or die( getTimeStamp("log"). " - pid $$ >> Error: opening output file ". $outfile. ":$!\n" ); or die( getTimeStamp("log")
. " - pid $$ >> Error: opening output file "
. $outfile
. ":$!\n" );
print getTimeStamp("log") . " - pid $$ >> file $outfile created\n"; print getTimeStamp("log") . " - pid $$ >> file $outfile created\n";
print SQLOUT "/* lock ". $db_name. ".$table table */\nLOCK TABLES ". $db_name. ".$table WRITE;\n"; print SQLOUT "/* lock "
. $db_name
. ".$table table */\nLOCK TABLES "
. $db_name
. ".$table WRITE;\n";
print SQLOUT "INSERT IGNORE INTO " . $db_name . ".$table\n"; print SQLOUT "INSERT IGNORE INTO " . $db_name . ".$table\n";
print SQLOUT "(`UnitName`,`ToolNameID`,`NodeNum`,`EventDate`,`EventTime`,`BatLevel`,`Temperature`,\n"; print SQLOUT
print SQLOUT "`Val0`,`Val1`,`Val2`,`Val3`,`Val4`,`Val5`,`Val6`,`Val7`,`Val8`,`Val9`,`ValA`,`ValB`,`ValC`,`ValD`,`ValE`,`ValF`)\n"; "(`UnitName`,`ToolNameID`,`NodeNum`,`EventDate`,`EventTime`,`BatLevel`,`Temperature`,\n";
print SQLOUT
"`Val0`,`Val1`,`Val2`,`Val3`,`Val4`,`Val5`,`Val6`,`Val7`,`Val8`,`Val9`,`ValA`,`ValB`,`ValC`,`ValD`,`ValE`,`ValF`)\n";
print SQLOUT "VALUES\n"; print SQLOUT "VALUES\n";
print SQLOUT @sql; print SQLOUT @sql;
@sql = (); @sql = ();
print SQLOUT "/* unlock table */\nUNLOCK TABLES;\n"; print SQLOUT "/* unlock table */\nUNLOCK TABLES;\n";
close SQLOUT close SQLOUT
or die( getTimeStamp("log"). " - pid $$ >> Error in closing file ". $outfile. "\n" ); or die( getTimeStamp("log")
. " - pid $$ >> Error in closing file "
. $outfile
. "\n" );
my @args = ( "mysql", "--login-path=asepath", "-e source " . $outfile ); my @args = ( "mysql", "--login-path=asepath", "-e source " . $outfile );
system(@args) == 0 system(@args) == 0
or die( getTimeStamp("log") . " - pid $$ >> system @args failed: $?\n" ); or die( getTimeStamp("log") . " - pid $$ >> system @args failed: $?\n" );
@@ -88,27 +105,33 @@ sub writeOutSql {
return; return;
} }
sub matlabCalc { sub matlabCalc {
getMatlabCmd(); getMatlabCmd();
$matlab_timestamp = getTimeStamp("db_ts"); $matlab_timestamp = getTimeStamp("db_ts");
print getTimeStamp("log") . " - pid $$ >> $unit - $tool MatLab calc started...\n"; print getTimeStamp("log")
if ($matlab_cmd =~ /_lnx$/) { . " - pid $$ >> $unit - $tool MatLab calc started...\n";
if ( $matlab_cmd =~ /_lnx$/ ) {
$matlab_cmd = './run_' . $matlab_cmd . '.sh'; $matlab_cmd = './run_' . $matlab_cmd . '.sh';
#print $ENV{"HOME"} . "\n"; #print $ENV{"HOME"} . "\n";
$ENV{"HOME"} = "/" . $ENV{"HOME"}; $ENV{"HOME"} = "/" . $ENV{"HOME"};
chdir($matlab_func_dir) chdir($matlab_func_dir)
or die "cannot change: $!\n"; or die "cannot change: $!\n";
print getTimeStamp("log") . " - pid $$ >> current dir: $matlab_func_dir\n"; print getTimeStamp("log")
my @args = ( 'timeout', $matlab_timeout, $matlab_cmd, $matlab_rt, $unit, $tool); . " - pid $$ >> current dir: $matlab_func_dir\n";
if (system(@args) != 0) { my @args =
( 'timeout', $matlab_timeout, $matlab_cmd, $matlab_rt, $unit, $tool );
if ( system(@args) != 0 ) {
my $exit_value = $? >> 8; my $exit_value = $? >> 8;
if ($exit_value == 124) { if ( $exit_value == 124 ) {
print getTimeStamp("log") . " - pid $$ >> system @args excessive duration: killed after $matlab_timeout seconds\n"; print getTimeStamp("log")
$matlab_error = "Maltab elab excessive duration: killed after $matlab_timeout seconds"; . " - pid $$ >> system @args excessive duration: killed after $matlab_timeout seconds\n";
} else { $matlab_error =
print getTimeStamp("log") . " - pid $$ >> system @args failed: return code $exit_value - $?\n"; "Maltab elab excessive duration: killed after $matlab_timeout seconds";
}
else {
print getTimeStamp("log")
. " - pid $$ >> system @args failed: return code $exit_value - $?\n";
$matlab_error = "Maltab elab failed: $exit_value - $?"; $matlab_error = "Maltab elab failed: $exit_value - $?";
} }
makeEmailMsg(); makeEmailMsg();
@@ -116,35 +139,40 @@ sub matlabCalc {
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n"; print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit(1); exit(1);
} }
} else { }
else {
$matlab_cmd = 'matlab_' . uc $matlab_cmd . '.cmd'; $matlab_cmd = 'matlab_' . uc $matlab_cmd . '.cmd';
my @out_matlab = `ssh1 $matlab_ip 'cmd /c $matlab_cmd ' $tool`; my @out_matlab = `ssh1 $matlab_ip 'cmd /c $matlab_cmd ' $tool`;
if (index($out_matlab[-1], "Failure") != -1) { if ( index( $out_matlab[-1], "Failure" ) != -1 ) {
print getTimeStamp("log"). " - pid $$ >> $unit - $tool MatLab calc failed.\n"; print getTimeStamp("log")
. " - pid $$ >> $unit - $tool MatLab calc failed.\n";
makeEmailMsg(); makeEmailMsg();
emailSend(); emailSend();
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n"; print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit(1); exit(1);
} }
} }
print getTimeStamp("log"). " - pid $$ >> $unit - $tool MatLab calc executed.\n"; print getTimeStamp("log")
. " - pid $$ >> $unit - $tool MatLab calc executed.\n";
return; return;
} }
sub trxelab { sub trxelab {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password ) my $dbh =
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr"; DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log")
. " - pid $$ >> Could not connect to database: $DBI::errstr";
my $sth = $dbh->prepare( my $sth = $dbh->prepare(
'select ftp_addrs, ftp_user, ftp_passwd, ftp_parm, ftp_filename, ftp_target, duedate from units 'select ftp_addrs, ftp_user, ftp_passwd, ftp_parm, ftp_filename, ftp_target, duedate from units
where id = ' . $unit_id . ';' where id = ' . $unit_id . ';'
) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr"; ) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
$sth->execute(); $sth->execute();
if ( $sth->rows eq 0 ) { if ( $sth->rows eq 0 ) {
die getTimeStamp("log") . " - pid $$ >> No unit ftp params selected.\n"; die getTimeStamp("log") . " - pid $$ >> No unit ftp params selected.\n";
}else { }
else {
while ( my $results = $sth->fetchrow_hashref ) { while ( my $results = $sth->fetchrow_hashref ) {
$ftp_addrs = $results->{'ftp_addrs'}; $ftp_addrs = $results->{'ftp_addrs'};
$ftp_user = $results->{'ftp_user'}; $ftp_user = $results->{'ftp_user'};
@@ -162,11 +190,19 @@ sub trxelab {
my $fileelab; my $fileelab;
if ( $ftp_filename eq "" ) { if ( $ftp_filename eq "" ) {
$fileelab ='/var/lib/mysql-files/'. $tool . '_'. getTimeStamp(). '.csv'; #mettere quello che si prende da query *** aggiungere $unit $fileelab =
}else { '/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/(\$\w+)/$1/eeg;
$ftp_filename =~ s/\s/_/g; $ftp_filename =~ s/\s/_/g;
$fileelab ='/var/lib/mysql-files/'. $ftp_filename . '_'. getTimeStamp() . '.csv'; $fileelab =
'/var/lib/mysql-files/'
. $ftp_filename . '_'
. getTimeStamp() . '.csv';
} }
my $sthdo = $dbh->do( my $sthdo = $dbh->do(
@@ -191,67 +227,99 @@ sub trxelab {
$ftp_parm //= ""; $ftp_parm //= "";
$ftp_parm =~ s/\s//g; $ftp_parm =~ s/\s//g;
my %ftp_parms = ('Host' => $ftp_addrs,); my %ftp_parms = ( 'Host' => $ftp_addrs, );
foreach my $parm (split(/,/, $ftp_parm)){
my ($key, $val) = split(/=>/, $parm);
$ftp_parms{$key} = $val;
}
$ftp_parms{'Debug'} = 0; $ftp_parms{'Debug'} = 0;
$ftp_parms{'Passive'} = 1; $ftp_parms{'Passive'} = 1;
print getTimeStamp("log") . " - pid $$ >> $unit - $tool ftp parm:\n" . Dumper(%ftp_parms); foreach my $parm ( split( /,/, $ftp_parm ) ) {
my ( $key, $val ) = split( /=>/, $parm );
$ftp_parms{$key} = $val;
}
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool ftp parm:\n"
. Dumper(%ftp_parms);
if ( !defined $duedate if ( !defined $duedate
or($duedate eq '0000-00-00 00:00:00') or ( $duedate eq '0000-00-00 00:00:00' )
or($duedate eq '') or ( $duedate eq '' )
or($duedate gt getTimeStamp("db_ts") )) { or ( $duedate gt getTimeStamp("db_ts") ) )
{
my $ftp = Net::FTP->new(%ftp_parms) my $ftp = Net::FTP->new(%ftp_parms)
or die getTimeStamp("log"). " - pid $$ >> Cannot connect to $ftp_addrs: $@ \n"; 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 ) $ftp->login( $ftp_user, $ftp_passwd )
or die getTimeStamp("log"). " - pid $$ >> Cannot login ". $ftp->message . "\n"; or die getTimeStamp("log")
. " - pid $$ >> Cannot login "
. $ftp->message . "\n";
$ftp_target //= ""; $ftp_target //= "";
if ( $ftp_target ne "" ) { if ( $ftp_target ne "" ) {
$ftp->cwd($ftp_target) $ftp->cwd($ftp_target)
or die getTimeStamp("log"). " - pid $$ >> Change remote dir failed ". $ftp->message . "\n"; or die getTimeStamp("log")
. " - pid $$ >> Change remote dir failed "
. $ftp->message . "\n";
} }
print getTimeStamp("log"). " - pid $$ >> ftp target: ". $ftp->pwd() . ".\n"; print getTimeStamp("log")
. " - pid $$ >> ftp target: "
. $ftp->pwd() . ".\n";
$ftp->put($fileelab) $ftp->put($fileelab)
or die getTimeStamp("log"). " - pid $$ >> Put failed: ". $ftp->message . "\n"; or die getTimeStamp("log")
. " - pid $$ >> Put failed: "
. $ftp->message . "\n";
print getTimeStamp("log"). " - pid $$ >> ftp target lists ". scalar @{ $ftp->ls() }. " elements.\n"; print getTimeStamp("log")
. " - pid $$ >> ftp target lists "
. scalar @{ $ftp->ls() }
. " elements.\n";
$ftp->quit; $ftp->quit;
print getTimeStamp("log"). " - pid $$ >> $unit - $tool: $fileelab ftp put executed.\n"; print getTimeStamp("log")
} else { . " - pid $$ >> $unit - $tool: $fileelab ftp put executed.\n";
print getTimeStamp("log"). " - pid $$ >> $unit - $tool: $fileelab ftp put didn't executed because due date reached.\n"; }
else {
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool: $fileelab ftp put didn't executed because due date reached.\n";
} }
return; return;
} }
sub getNodesType { sub getNodesType {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password ) my $dbh =
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr"; DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log")
. " - pid $$ >> Could not connect to database: $DBI::errstr";
my $sth = $dbh->prepare( my $sth = $dbh->prepare(
'select t.name as name, n.seq as seq, n.num as num, n.channels as channels, y.type as type, n.ain as ain, n.din as din 'select t.name as name, n.seq as seq, n.num as num, n.channels as channels, y.type as type, n.ain as ain, n.din as din
from nodes as n from nodes as n
inner join tools as t on t.id = n.tool_id inner join tools as t on t.id = n.tool_id
inner join units as u on u.id = t.unit_id inner join units as u on u.id = t.unit_id
inner join nodetypes as y on n.nodetype_id = y.id inner join nodetypes as y on n.nodetype_id = y.id
where t.name = "' . $tool . '" and u.name = "' . $unit . '" order by 3;' where t.name = "'
. $tool
. '" and u.name = "'
. $unit
. '" order by 3;'
) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr"; ) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
$sth->execute(); $sth->execute();
print getTimeStamp("log"). " - pid $$ >> $unit - $tool: " . $sth->rows . " rows selected to get node type/Ain/Din/channels.\n"; print getTimeStamp("log")
. " - pid $$ >> $unit - $tool: "
. $sth->rows
. " rows selected to get node type/Ain/Din/channels.\n";
if ( $sth->rows eq 0 ) { if ( $sth->rows eq 0 ) {
print getTimeStamp("log"). " - pid $$ >> Node/Channels/Ain/Din not defined.\n"; print getTimeStamp("log")
print getTimeStamp("log"). " - pid $$ >> Execution ended.\n"; . " - pid $$ >> Node/Channels/Ain/Din not defined.\n";
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit; exit;
}else { }
else {
my $row = 0; my $row = 0;
while ( my $results = $sth->fetchrow_hashref ) { while ( my $results = $sth->fetchrow_hashref ) {
$channels[$row] = $results->{'channels'}; $channels[$row] = $results->{'channels'};
@@ -268,17 +336,22 @@ sub getNodesType {
return; return;
} }
sub getUdbPwd { sub getUdbPwd {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password ) my $dbh =
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr"; DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
my $sth = $dbh->prepare("SELECT db_user, db_pwd FROM ase_lar.companies where db_name = '". $db_name. "';" ) or die getTimeStamp("log")
. " - pid $$ >> Could not connect to database: $DBI::errstr";
my $sth = $dbh->prepare(
"SELECT db_user, db_pwd FROM ase_lar.companies where db_name = '"
. $db_name
. "';" )
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr"; or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
$sth->execute(); $sth->execute();
if ( $sth->rows eq 0 ) { if ( $sth->rows eq 0 ) {
die getTimeStamp("log") . " - pid $$ >> No password selected.\n"; die getTimeStamp("log") . " - pid $$ >> No password selected.\n";
}else { }
else {
my $results = $sth->fetchrow_hashref; my $results = $sth->fetchrow_hashref;
$password = $results->{'db_pwd'}; $password = $results->{'db_pwd'};
$username = $results->{'db_user'}; $username = $results->{'db_user'};
@@ -292,10 +365,11 @@ sub getUdbPwd {
return; return;
} }
sub getMatlabCmd { sub getMatlabCmd {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password ) my $dbh =
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr"; DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log")
. " - pid $$ >> Could not connect to database: $DBI::errstr";
my $sth = $dbh->prepare( my $sth = $dbh->prepare(
'select m.matcall, t.ftp_send , t.unit_id from matfuncs as m 'select m.matcall, t.ftp_send , t.unit_id from matfuncs as m
@@ -306,8 +380,10 @@ sub getMatlabCmd {
$sth->execute(); $sth->execute();
if ( $sth->rows eq 0 ) { if ( $sth->rows eq 0 ) {
die getTimeStamp("log"). " - pid $$ >> No tool's matlab function selected.\n"; die getTimeStamp("log")
}else { . " - pid $$ >> No tool's matlab function selected.\n";
}
else {
while ( my $results = $sth->fetchrow_hashref ) { while ( my $results = $sth->fetchrow_hashref ) {
$matlab_cmd = $results->{'matcall'}; $matlab_cmd = $results->{'matcall'};
$ftp_send = $results->{'ftp_send'}; $ftp_send = $results->{'ftp_send'};
@@ -322,7 +398,6 @@ sub getMatlabCmd {
return; return;
} }
sub makeEmailMsg { sub makeEmailMsg {
$email_msg = <<"END_MSG"; $email_msg = <<"END_MSG";
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -364,7 +439,6 @@ sub makeEmailMsg {
END_MSG END_MSG
} }
sub emailSend { sub emailSend {
$email_obj = 'Matlab error on unit ' . $unit . ' - tool ' . $tool; $email_obj = 'Matlab error on unit ' . $unit . ' - tool ' . $tool;
@@ -382,10 +456,12 @@ sub emailSend {
encoding => "7bit" encoding => "7bit"
}; };
my $mail_res = $sender->MailMsg({msg => $sender->{msg},}); my $mail_res = $sender->MailMsg( { msg => $sender->{msg}, } );
if (ref($mail_res) ne "Mail::Sender") { if ( ref($mail_res) ne "Mail::Sender" ) {
print getTimeStamp("log") . " - pid $$ >> $mail_res: $sender->{error_msg} \n"; print getTimeStamp("log")
} else { . " - pid $$ >> $mail_res: $sender->{error_msg} \n";
}
else {
print getTimeStamp("log") . " - pid $$ >> $email_obj\n"; print getTimeStamp("log") . " - pid $$ >> $email_obj\n";
print getTimeStamp("log") . " - pid $$ >> Mail sent to: $email_addr.\n"; print getTimeStamp("log") . " - pid $$ >> Mail sent to: $email_addr.\n";
} }
@@ -407,21 +483,24 @@ if ( $db_name ne 'asega' ) {
$db_sp = $db_name; $db_sp = $db_name;
getUdbPwd(); getUdbPwd();
$db_lar = $db_name; $db_lar = $db_name;
}else { }
else {
$db_name = 'ase_lar'; $db_name = 'ase_lar';
} }
my ( $filecsvname, $path, $suffix ) = fileparse( $filename, qr/\.[^.]*/ ); my ( $filecsvname, $path, $suffix ) = fileparse( $filename, qr/\.[^.]*/ );
if ( $filecsvname =~ m/^(\d\d_\d\d\d\d_|)(DT\d\d\d\d|LOC\d.*|GD\d*)_\d*$/i ) { if ( $filecsvname =~ m/^(\d\d_\d\d\d\d_|)(DT\d\d\d\d|LOC\d.*|GD\d*)_\d*$/i ) {
($fileDate, $fileTime) = split( /\s/, <FILE> ); ( $fileDate, $fileTime ) = split( /\s/, <FILE> );
($unittype, $unit ) = split( /\s/, uc <FILE> ); ( $unittype, $unit ) = split( /\s/, uc <FILE> );
$unit =~ s/;+$//; $unit =~ s/;+$//;
} elsif ( $filecsvname =~ m/^G201_ID\d\d\d\d_DT\d\d\d\d_\d*_\d*$/i ) { }
my @strings = $filecsvname =~ /(.{1,4})_(.{1,6})_(.{1,6})_(.{1,4})(.{1,2})(.{1,2})(.{1,2})(.{1,2})(.{1,2}).*/; elsif ( $filecsvname =~ m/^G201_ID\d\d\d\d_DT\d\d\d\d_\d*_\d*$/i ) {
my @strings = $filecsvname =~
/(.{1,4})_(.{1,6})_(.{1,6})_(.{1,4})(.{1,2})(.{1,2})(.{1,2})(.{1,2})(.{1,2}).*/;
$unittype = $strings[0]; $unittype = $strings[0];
$unit = $strings[1]; $unit = $strings[1];
$tool = $strings[2]; $tool = $strings[2];
$fileDate = $strings[3] . "/" . $strings[4] . "/" . $strings[5];; $fileDate = $strings[3] . "/" . $strings[4] . "/" . $strings[5];
$fileTime = $strings[6] . ":" . $strings[7] . ":" . $strings[8]; $fileTime = $strings[6] . ":" . $strings[7] . ":" . $strings[8];
$tooltype = 'MUX'; $tooltype = 'MUX';
} }
@@ -435,25 +514,32 @@ while ( my $line = <FILE> ) {
if ( defined $info[3] && $info[3] =~ m/^DT\d\d\d\d$/i ) { if ( defined $info[3] && $info[3] =~ m/^DT\d\d\d\d$/i ) {
$tool = uc $info[3]; $tool = uc $info[3];
$tooltype = uc $info[2]; $tooltype = uc $info[2];
print getTimeStamp("log"). " - pid $$ >> Found $tooltype tool name: $tool\n"; print getTimeStamp("log")
. " - pid $$ >> Found $tooltype tool name: $tool\n";
getNodesType(); getNodesType();
}elsif ( defined $info[2] && $info[2] =~ m/^LOC\d*$/i ) { }
elsif ( defined $info[2] && $info[2] =~ m/^LOC\d*$/i ) {
$tool = uc $info[2]; $tool = uc $info[2];
$tooltype = 'LOC'; $tooltype = 'LOC';
print getTimeStamp("log"). " - pid $$ >> Found $tooltype tool name: $tool\n"; print getTimeStamp("log")
. " - pid $$ >> Found $tooltype tool name: $tool\n";
getNodesType(); getNodesType();
}elsif ( defined $info[3] && $info[3] =~ m/^GD\d*$/i ) { }
elsif ( defined $info[3] && $info[3] =~ m/^GD\d*$/i ) {
$tool = uc $info[3]; $tool = uc $info[3];
$tooltype = 'GD'; $tooltype = 'GD';
print getTimeStamp("log"). " - pid $$ >> Found $tooltype tool name: $tool\n"; print getTimeStamp("log")
. " - pid $$ >> Found $tooltype tool name: $tool\n";
} }
}else { }
else {
$NodeData =~ s/\x0d{0,1}\x0a\Z//s; $NodeData =~ s/\x0d{0,1}\x0a\Z//s;
$NodeData =~ s/;+$//; $NodeData =~ s/;+$//;
#$NodeData =~ s/\r\n\z//; #$NodeData =~ s/\r\n\z//;
if ($unittype eq 'G201' and $G201_fcheck eq 0) { if ( $unittype eq 'G201' and $G201_fcheck eq 0 ) {
print getTimeStamp("log"). " - pid $$ >> Found $tooltype tool name: $tool\n"; print getTimeStamp("log")
. " - pid $$ >> Found $tooltype tool name: $tool\n";
getNodesType(); getNodesType();
$G201_fcheck = 1; $G201_fcheck = 1;
} }
@@ -471,12 +557,13 @@ while ( my $line = <FILE> ) {
join( ';', splice( @NewData, 0, $ch ) ); join( ';', splice( @NewData, 0, $ch ) );
} }
}elsif ( $tooltype eq "MUSA" ) { }
elsif ( $tooltype eq "MUSA" ) {
#$NodeData =~ s/Dis\./N\/A/g; #$NodeData =~ s/Dis\./N\/A/g;
my @tmpData = grep /\S/, split( /\||;/, $NodeData ); my @tmpData = grep /\S/, split( /\||;/, $NodeData );
my $tmpBatt = shift @tmpData; my $tmpBatt = shift @tmpData;
@NewData = ($tmpBatt, $tmpData[0], @tmpData); @NewData = ( $tmpBatt, $tmpData[0], @tmpData );
my $idx = 0; my $idx = 0;
@@ -490,48 +577,62 @@ while ( my $line = <FILE> ) {
#print Dumper \@channels; #print Dumper \@channels;
#print Dumper \@din; #print Dumper \@din;
}elsif ( $tooltype eq "LOC" ) { }
elsif ( $tooltype eq "LOC" ) {
my ( $Vbat, $Tmod, $Ain1, $Ain2, $Din1, $Din2 ) = my ( $Vbat, $Tmod, $Ain1, $Ain2, $Din1, $Din2 ) =
split( /;/, $NodeData ); split( /;/, $NodeData );
my $idx = 0; my $idx = 0;
$CSVData[$idx++] = $Vbat . ";" . $Tmod; $CSVData[ $idx++ ] = $Vbat . ";" . $Tmod;
my $used_din = 0; my $used_din = 0;
my $used_ain = 0; my $used_ain = 0;
for my $i (0 .. $#din){ for my $i ( 0 .. $#din ) {
if ($din[$i] eq 1) { if ( $din[$i] eq 1 ) {
if ($used_din eq 0) { if ( $used_din eq 0 ) {
$CSVData[$idx++] = $Din1; $CSVData[ $idx++ ] = $Din1;
$used_din = 1; $used_din = 1;
} else {
$CSVData[$idx++] = $Din2;
} }
} elsif ($ain[$i] eq 1) { else {
if ($used_ain eq 0) { $CSVData[ $idx++ ] = $Din2;
$CSVData[$idx++] = $Ain1; }
}
elsif ( $ain[$i] eq 1 ) {
if ( $used_ain eq 0 ) {
$CSVData[ $idx++ ] = $Ain1;
$used_ain = 1; $used_ain = 1;
} else {
$CSVData[$idx++] = $Ain2;
} }
} elsif ($din[$i] eq 2) { else {
$CSVData[$idx++] = $Din1 . ";" . $Din2; $CSVData[ $idx++ ] = $Ain2;
} elsif ($ain[$i] eq 2) { }
$CSVData[$idx++] = $Ain1 . ";" . $Ain2; }
} else { elsif ( $din[$i] eq 2 ) {
$CSVData[$idx++] = "N/A"; $CSVData[ $idx++ ] = $Din1 . ";" . $Din2;
}
elsif ( $ain[$i] eq 2 ) {
$CSVData[ $idx++ ] = $Ain1 . ";" . $Ain2;
}
else {
$CSVData[ $idx++ ] = "N/A";
} }
} }
}elsif ( $tooltype eq "GD" ) { }
elsif ( $tooltype eq "GD" ) {
my ( $div, $Vbat, $Tmod ) = my ( $div, $Vbat, $Tmod ) =
split( /;/, $NodeData ); split( /;/, $NodeData );
$CSVData[0] = $Vbat . ";" . $Tmod; $CSVData[0] = $Vbat . ";" . $Tmod;
my ( $y, $m, $d, $t ) = split( /[\s\/]/, $first ); my ( $y, $m, $d, $t ) = split( /[\s\/]/, $first );
my ( $h, $min, $sec ) = split( /:/, $t ); my ( $h, $min, $sec ) = split( /:/, $t );
$GDEventDate = $y . '-' . $m . '-' . $d; $GDEventDate = $y . '-' . $m . '-' . $d;
$CSVData[1] = "DT". substr( $tool, 2, 4 ) . ';'. $h . ':'. ( $min - 1 ) . ';'. $h . ':'. ( $min + 1 ); $CSVData[1] = "DT"
}else { . substr( $tool, 2, 4 ) . ';'
. $h . ':'
. ( $min - 1 ) . ';'
. $h . ':'
. ( $min + 1 );
}
else {
@CSVData = split( /\|/, $NodeData ); @CSVData = split( /\|/, $NodeData );
} }
@@ -542,17 +643,19 @@ while ( my $line = <FILE> ) {
if ( $nodenum eq 0 ) { if ( $nodenum eq 0 ) {
$toolbatt = $data[0]; $toolbatt = $data[0];
$tooltemp = $data[1]; $tooltemp = $data[1];
}else { }
else {
my ( $y, $m, $d, $t ) = split( /[\s\/]/, $first ); my ( $y, $m, $d, $t ) = split( /[\s\/]/, $first );
if (length($y) != 4) { # G201 con la data invertita if ( length($y) != 4 ) { # G201 con la data invertita
my $w = $y; my $w = $y;
$y = $d; $y = $d;
$m = sprintf('%02d',$m); $m = sprintf( '%02d', $m );
$d = sprintf('%02d',$w); $d = sprintf( '%02d', $w );
} }
foreach (@data) { foreach (@data) {
if ( $sql[ ( $outcount % $maxsqllines ) ] eq "" ) { if ( $sql[ ( $outcount % $maxsqllines ) ] eq "" ) {
$sql[ ( $outcount % $maxsqllines ) ] = "('$unit','$tool','$nodenum','$y-$m-$d','$t','$toolbatt','$tooltemp'"; $sql[ ( $outcount % $maxsqllines ) ] =
"('$unit','$tool','$nodenum','$y-$m-$d','$t','$toolbatt','$tooltemp'";
} }
$sql[ ( $outcount % $maxsqllines ) ] .= ",'" . $_ . "'"; $sql[ ( $outcount % $maxsqllines ) ] .= ",'" . $_ . "'";
} }
@@ -561,7 +664,8 @@ while ( my $line = <FILE> ) {
if ( ++$outcount % $maxsqllines eq 0 ) { if ( ++$outcount % $maxsqllines eq 0 ) {
$sql[ ( $outcount % $maxsqllines ) - 1 ] .= ";\n"; $sql[ ( $outcount % $maxsqllines ) - 1 ] .= ";\n";
writeOutSql($tool); writeOutSql($tool);
}else { }
else {
$sql[ ( $outcount % $maxsqllines ) - 1 ] .= ",\n"; $sql[ ( $outcount % $maxsqllines ) - 1 ] .= ",\n";
} }
} }
@@ -575,7 +679,8 @@ $sql[ ( $outcount % $maxsqllines ) - 1 ] =~ s/,$/;/g;
writeOutSql($tool); writeOutSql($tool);
if ( $tooltype eq "GD" ) { if ( $tooltype eq "GD" ) {
print getTimeStamp("log") . " - pid $$ >> tool GD: nothing to do.\n"; print getTimeStamp("log") . " - pid $$ >> tool GD: nothing to do.\n";
}else { }
else {
matlabCalc(); matlabCalc();
if ($ftp_send) { if ($ftp_send) {

View File

@@ -19,7 +19,7 @@ my $db_sp = 'ase_lar';
my $server = 'localhost'; my $server = 'localhost';
my $db_name = "ase_lar"; my $db_name = "ase_lar";
my @sql; my @sql;
my ($unit, $tool); my ( $unit, $tool );
my $matlab_timestamp = ""; my $matlab_timestamp = "";
my $ftp_addrs; my $ftp_addrs;
my $ftp_user; my $ftp_user;
@@ -29,36 +29,42 @@ my $ftp_filename;
my $ftp_target; my $ftp_target;
my $duedate = ''; my $duedate = '';
sub getTimeStamp
sub getTimeStamp{ # parm [ts] => timestamp for filename; log => timestamp for log { # parm [ts] => timestamp for filename; log => timestamp for log
my $format = "%04d%02d%02d%02d%02d%02d"; my $format = "%04d%02d%02d%02d%02d%02d";
my ($p1) = @_; my ($p1) = @_;
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time()); my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
localtime( time() );
if ( defined $p1 and $p1 eq "log" ) { if ( defined $p1 and $p1 eq "log" ) {
$format = "%04d%02d%02d %02d:%02d:%02d"; $format = "%04d%02d%02d %02d:%02d:%02d";
} }
if ( defined $p1 and $p1 eq "db_ts" ) { if ( defined $p1 and $p1 eq "db_ts" ) {
( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time() - 36000); ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
localtime( time() - 36000 );
$format = "%04d-%02d-%02d %02d:%02d:%02d"; $format = "%04d-%02d-%02d %02d:%02d:%02d";
} }
my $timestamp =sprintf( $format, $year + 1900, $mon + 1, $mday, $hour, $min, $sec ); my $timestamp =
sprintf( $format, $year + 1900, $mon + 1, $mday, $hour, $min, $sec );
return $timestamp; return $timestamp;
} }
sub trxelab { sub trxelab {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password ) my $dbh =
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr"; DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log")
. " - pid $$ >> Could not connect to database: $DBI::errstr";
my $sth = $dbh->prepare( my $sth = $dbh->prepare(
'select ftp_addrs, ftp_user, ftp_passwd, ftp_parm, ftp_filename, ftp_target, duedate from units 'select ftp_addrs, ftp_user, ftp_passwd, ftp_parm, ftp_filename, ftp_target, duedate from units
where name = "' . $unit . '";' where name = "' . $unit . '";'
) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr"; ) or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
$sth->execute(); $sth->execute();
if ( $sth->rows eq 0 ) { if ( $sth->rows eq 0 ) {
die getTimeStamp("log") . " - pid $$ >> No unit ftp params selected.\n"; die getTimeStamp("log") . " - pid $$ >> No unit ftp params selected.\n";
}else { }
else {
while ( my $results = $sth->fetchrow_hashref ) { while ( my $results = $sth->fetchrow_hashref ) {
$ftp_addrs = $results->{'ftp_addrs'}; $ftp_addrs = $results->{'ftp_addrs'};
$ftp_user = $results->{'ftp_user'}; $ftp_user = $results->{'ftp_user'};
@@ -76,11 +82,19 @@ sub trxelab {
my $fileelab; my $fileelab;
if ( $ftp_filename eq "" ) { if ( $ftp_filename eq "" ) {
$fileelab ='/var/lib/mysql-files/'. $tool . '_'. getTimeStamp(). '.csv'; #mettere quello che si prende da query *** aggiungere $unit $fileelab =
}else { '/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/(\$\w+)/$1/eeg;
$ftp_filename =~ s/\s/_/g; $ftp_filename =~ s/\s/_/g;
$fileelab ='/var/lib/mysql-files/'. $ftp_filename . '_'. getTimeStamp() . '.csv'; $fileelab =
'/var/lib/mysql-files/'
. $ftp_filename . '_'
. getTimeStamp() . '.csv';
} }
my $sthdo = $dbh->do( my $sthdo = $dbh->do(
@@ -105,45 +119,64 @@ sub trxelab {
$ftp_parm //= ""; $ftp_parm //= "";
$ftp_parm =~ s/\s//g; $ftp_parm =~ s/\s//g;
my %ftp_parms = ('Host' => $ftp_addrs,); my %ftp_parms = ( 'Host' => $ftp_addrs, );
$ftp_parms{'Debug'} = 0; $ftp_parms{'Debug'} = 0;
$ftp_parms{'Passive'} = 1; $ftp_parms{'Passive'} = 1;
foreach my $parm (split(/,/, $ftp_parm)){ foreach my $parm ( split( /,/, $ftp_parm ) ) {
my ($key, $val) = split(/=>/, $parm); my ( $key, $val ) = split( /=>/, $parm );
$ftp_parms{$key} = $val; $ftp_parms{$key} = $val;
} }
print getTimeStamp("log") . " - pid $$ >> $unit - $tool ftp parm:\n" . Dumper(%ftp_parms); print getTimeStamp("log")
. " - pid $$ >> $unit - $tool ftp parm:\n"
. Dumper(%ftp_parms);
if ( !defined $duedate if ( !defined $duedate
or($duedate eq '0000-00-00 00:00:00') or ( $duedate eq '0000-00-00 00:00:00' )
or($duedate eq '') or ( $duedate eq '' )
or($duedate gt getTimeStamp("db_ts") )) { or ( $duedate gt getTimeStamp("db_ts") ) )
{
my $ftp = Net::FTP->new(%ftp_parms) my $ftp = Net::FTP->new(%ftp_parms)
or die getTimeStamp("log"). " - pid $$ >> Cannot connect to $ftp_addrs: $@ \n"; 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 ) $ftp->login( $ftp_user, $ftp_passwd )
or die getTimeStamp("log"). " - pid $$ >> Cannot login ". $ftp->message . "\n"; or die getTimeStamp("log")
if ( $ftp_parms{"SSL"} ) { . " - pid $$ >> Cannot login "
$ftp->starttls(); . $ftp->message . "\n";
}
$ftp_target //= ""; $ftp_target //= "";
if ( $ftp_target ne "" ) { if ( $ftp_target ne "" ) {
$ftp->cwd($ftp_target) $ftp->cwd($ftp_target)
or die getTimeStamp("log"). " - pid $$ >> Change remote dir failed ". $ftp->message . "\n"; or die getTimeStamp("log")
. " - pid $$ >> Change remote dir failed "
. $ftp->message . "\n";
} }
print getTimeStamp("log"). " - pid $$ >> ftp target: ". $ftp->pwd() . ".\n"; print getTimeStamp("log")
. " - pid $$ >> ftp target: "
. $ftp->pwd() . ".\n";
$ftp->put($fileelab) $ftp->put($fileelab)
or die getTimeStamp("log"). " - pid $$ >> Put failed: ". $ftp->message . "\n"; or die getTimeStamp("log")
. " - pid $$ >> Put failed: "
. $ftp->message . "\n";
print getTimeStamp("log"). " - pid $$ >> ftp target lists ". scalar @{ $ftp->ls() }. " elements.\n"; print getTimeStamp("log")
. " - pid $$ >> ftp target lists "
. scalar @{ $ftp->ls() }
. " elements.\n";
$ftp->quit; $ftp->quit;
print getTimeStamp("log"). " - pid $$ >> $unit - $tool: $fileelab ftp put executed.\n"; print getTimeStamp("log")
} else { . " - pid $$ >> $unit - $tool: $fileelab ftp put executed.\n";
print getTimeStamp("log"). " - pid $$ >> $unit - $tool: $fileelab ftp put didn't executed because due date reached.\n"; }
else {
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool: $fileelab ftp put didn't executed because due date reached.\n";
} }
return; return;
} }