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 $outfilenum = 0;
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_cmd = "matlab.cmd";
my $matlab_timestamp = "";
@@ -36,18 +39,19 @@ my $ftp_parm;
my $ftp_filename;
my $ftp_target;
my $duedate = '';
my ($unit_id, $unit, $unittype);
my ($fileDate, $fileTime);
my ( $unit_id, $unit, $unittype );
my ( $fileDate, $fileTime );
my $matlab_rt = "/usr/local/MATLAB/MATLAB_Runtime/v93";
my $matlab_func_dir = "/usr/local/matlab_func/";
my $matlab_error = '';
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_msg, $email_obj);
my $email_addr =
'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;
sub getTimeStamp{ # parm [ts] => timestamp for filename; log => timestamp for log
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" ) {
@@ -56,29 +60,42 @@ sub getTimeStamp{ # parm [ts] => timestamp for filename; log => timestamp for
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 );
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 writeOutSql {
my ($tn) = @_;
my $outfile = $sqlout . "_" . $outfilenum++;
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 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 "(`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
"(`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 @sql;
@sql = ();
print SQLOUT "/* unlock table */\nUNLOCK TABLES;\n";
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 );
system(@args) == 0
or die( getTimeStamp("log") . " - pid $$ >> system @args failed: $?\n" );
@@ -88,27 +105,33 @@ sub writeOutSql {
return;
}
sub matlabCalc {
getMatlabCmd();
$matlab_timestamp = getTimeStamp("db_ts");
print getTimeStamp("log") . " - pid $$ >> $unit - $tool MatLab calc started...\n";
if ($matlab_cmd =~ /_lnx$/) {
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool MatLab calc started...\n";
if ( $matlab_cmd =~ /_lnx$/ ) {
$matlab_cmd = './run_' . $matlab_cmd . '.sh';
#print $ENV{"HOME"} . "\n";
$ENV{"HOME"} = "/" . $ENV{"HOME"};
chdir($matlab_func_dir)
or die "cannot change: $!\n";
print getTimeStamp("log") . " - pid $$ >> current dir: $matlab_func_dir\n";
my @args = ( 'timeout', $matlab_timeout, $matlab_cmd, $matlab_rt, $unit, $tool);
if (system(@args) != 0) {
print getTimeStamp("log")
. " - pid $$ >> current dir: $matlab_func_dir\n";
my @args =
( 'timeout', $matlab_timeout, $matlab_cmd, $matlab_rt, $unit, $tool );
if ( system(@args) != 0 ) {
my $exit_value = $? >> 8;
if ($exit_value == 124) {
print getTimeStamp("log") . " - pid $$ >> system @args excessive duration: killed after $matlab_timeout seconds\n";
$matlab_error = "Maltab elab excessive duration: killed after $matlab_timeout seconds";
} else {
print getTimeStamp("log") . " - pid $$ >> system @args failed: return code $exit_value - $?\n";
if ( $exit_value == 124 ) {
print getTimeStamp("log")
. " - pid $$ >> system @args excessive duration: killed after $matlab_timeout seconds\n";
$matlab_error =
"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 - $?";
}
makeEmailMsg();
@@ -116,35 +139,40 @@ sub matlabCalc {
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit(1);
}
} else {
}
else {
$matlab_cmd = 'matlab_' . uc $matlab_cmd . '.cmd';
my @out_matlab = `ssh1 $matlab_ip 'cmd /c $matlab_cmd ' $tool`;
if (index($out_matlab[-1], "Failure") != -1) {
print getTimeStamp("log"). " - pid $$ >> $unit - $tool MatLab calc failed.\n";
if ( index( $out_matlab[-1], "Failure" ) != -1 ) {
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool MatLab calc failed.\n";
makeEmailMsg();
emailSend();
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit(1);
}
}
print getTimeStamp("log"). " - pid $$ >> $unit - $tool MatLab calc executed.\n";
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool MatLab calc executed.\n";
return;
}
sub trxelab {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr";
my $dbh =
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(
'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 . ';'
) 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 {
}
else {
while ( my $results = $sth->fetchrow_hashref ) {
$ftp_addrs = $results->{'ftp_addrs'};
$ftp_user = $results->{'ftp_user'};
@@ -162,11 +190,19 @@ sub trxelab {
my $fileelab;
if ( $ftp_filename eq "" ) {
$fileelab ='/var/lib/mysql-files/'. $tool . '_'. getTimeStamp(). '.csv'; #mettere quello che si prende da query *** aggiungere $unit
}else {
$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';
$fileelab =
'/var/lib/mysql-files/'
. $ftp_filename . '_'
. getTimeStamp() . '.csv';
}
my $sthdo = $dbh->do(
@@ -191,67 +227,99 @@ sub trxelab {
$ftp_parm //= "";
$ftp_parm =~ s/\s//g;
my %ftp_parms = ('Host' => $ftp_addrs,);
foreach my $parm (split(/,/, $ftp_parm)){
my ($key, $val) = split(/=>/, $parm);
$ftp_parms{$key} = $val;
}
my %ftp_parms = ( 'Host' => $ftp_addrs, );
$ftp_parms{'Debug'} = 0;
$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
or($duedate eq '0000-00-00 00:00:00')
or($duedate eq '')
or($duedate gt getTimeStamp("db_ts") )) {
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";
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";
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";
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)
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;
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";
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;
}
sub getNodesType {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr";
my $dbh =
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(
'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
inner join tools as t on t.id = n.tool_id
inner join units as u on u.id = t.unit_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";
$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 ) {
print getTimeStamp("log"). " - pid $$ >> Node/Channels/Ain/Din not defined.\n";
print getTimeStamp("log"). " - pid $$ >> Execution ended.\n";
print getTimeStamp("log")
. " - pid $$ >> Node/Channels/Ain/Din not defined.\n";
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit;
}else {
}
else {
my $row = 0;
while ( my $results = $sth->fetchrow_hashref ) {
$channels[$row] = $results->{'channels'};
@@ -268,17 +336,22 @@ sub getNodesType {
return;
}
sub getUdbPwd {
my $dbh =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("SELECT db_user, db_pwd FROM ase_lar.companies where db_name = '". $db_name. "';" )
my $dbh =
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(
"SELECT db_user, db_pwd FROM ase_lar.companies where db_name = '"
. $db_name
. "';" )
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
$sth->execute();
if ( $sth->rows eq 0 ) {
die getTimeStamp("log") . " - pid $$ >> No password selected.\n";
}else {
}
else {
my $results = $sth->fetchrow_hashref;
$password = $results->{'db_pwd'};
$username = $results->{'db_user'};
@@ -292,10 +365,11 @@ sub getUdbPwd {
return;
}
sub getMatlabCmd {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr";
my $dbh =
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(
'select m.matcall, t.ftp_send , t.unit_id from matfuncs as m
@@ -306,8 +380,10 @@ sub getMatlabCmd {
$sth->execute();
if ( $sth->rows eq 0 ) {
die getTimeStamp("log"). " - pid $$ >> No tool's matlab function selected.\n";
}else {
die getTimeStamp("log")
. " - pid $$ >> No tool's matlab function selected.\n";
}
else {
while ( my $results = $sth->fetchrow_hashref ) {
$matlab_cmd = $results->{'matcall'};
$ftp_send = $results->{'ftp_send'};
@@ -322,7 +398,6 @@ sub getMatlabCmd {
return;
}
sub makeEmailMsg {
$email_msg = <<"END_MSG";
<!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
}
sub emailSend {
$email_obj = 'Matlab error on unit ' . $unit . ' - tool ' . $tool;
@@ -382,10 +456,12 @@ sub emailSend {
encoding => "7bit"
};
my $mail_res = $sender->MailMsg({msg => $sender->{msg},});
if (ref($mail_res) ne "Mail::Sender") {
print getTimeStamp("log") . " - pid $$ >> $mail_res: $sender->{error_msg} \n";
} else {
my $mail_res = $sender->MailMsg( { msg => $sender->{msg}, } );
if ( ref($mail_res) ne "Mail::Sender" ) {
print getTimeStamp("log")
. " - pid $$ >> $mail_res: $sender->{error_msg} \n";
}
else {
print getTimeStamp("log") . " - pid $$ >> $email_obj\n";
print getTimeStamp("log") . " - pid $$ >> Mail sent to: $email_addr.\n";
}
@@ -407,21 +483,24 @@ if ( $db_name ne 'asega' ) {
$db_sp = $db_name;
getUdbPwd();
$db_lar = $db_name;
}else {
}
else {
$db_name = 'ase_lar';
}
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 ) {
($fileDate, $fileTime) = split( /\s/, <FILE> );
($unittype, $unit ) = split( /\s/, uc <FILE> );
( $fileDate, $fileTime ) = split( /\s/, <FILE> );
( $unittype, $unit ) = split( /\s/, uc <FILE> );
$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];
$unit = $strings[1];
$tool = $strings[2];
$fileDate = $strings[3] . "/" . $strings[4] . "/" . $strings[5];;
$fileDate = $strings[3] . "/" . $strings[4] . "/" . $strings[5];
$fileTime = $strings[6] . ":" . $strings[7] . ":" . $strings[8];
$tooltype = 'MUX';
}
@@ -435,25 +514,32 @@ while ( my $line = <FILE> ) {
if ( defined $info[3] && $info[3] =~ m/^DT\d\d\d\d$/i ) {
$tool = uc $info[3];
$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();
}elsif ( defined $info[2] && $info[2] =~ m/^LOC\d*$/i ) {
}
elsif ( defined $info[2] && $info[2] =~ m/^LOC\d*$/i ) {
$tool = uc $info[2];
$tooltype = 'LOC';
print getTimeStamp("log"). " - pid $$ >> Found $tooltype tool name: $tool\n";
print getTimeStamp("log")
. " - pid $$ >> Found $tooltype tool name: $tool\n";
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];
$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/;+$//;
#$NodeData =~ s/\r\n\z//;
if ($unittype eq 'G201' and $G201_fcheck eq 0) {
print getTimeStamp("log"). " - pid $$ >> Found $tooltype tool name: $tool\n";
if ( $unittype eq 'G201' and $G201_fcheck eq 0 ) {
print getTimeStamp("log")
. " - pid $$ >> Found $tooltype tool name: $tool\n";
getNodesType();
$G201_fcheck = 1;
}
@@ -471,12 +557,13 @@ while ( my $line = <FILE> ) {
join( ';', splice( @NewData, 0, $ch ) );
}
}elsif ( $tooltype eq "MUSA" ) {
}
elsif ( $tooltype eq "MUSA" ) {
#$NodeData =~ s/Dis\./N\/A/g;
my @tmpData = grep /\S/, split( /\||;/, $NodeData );
my $tmpBatt = shift @tmpData;
@NewData = ($tmpBatt, $tmpData[0], @tmpData);
@NewData = ( $tmpBatt, $tmpData[0], @tmpData );
my $idx = 0;
@@ -490,48 +577,62 @@ while ( my $line = <FILE> ) {
#print Dumper \@channels;
#print Dumper \@din;
}elsif ( $tooltype eq "LOC" ) {
}
elsif ( $tooltype eq "LOC" ) {
my ( $Vbat, $Tmod, $Ain1, $Ain2, $Din1, $Din2 ) =
split( /;/, $NodeData );
my $idx = 0;
$CSVData[$idx++] = $Vbat . ";" . $Tmod;
$CSVData[ $idx++ ] = $Vbat . ";" . $Tmod;
my $used_din = 0;
my $used_ain = 0;
for my $i (0 .. $#din){
if ($din[$i] eq 1) {
if ($used_din eq 0) {
$CSVData[$idx++] = $Din1;
for my $i ( 0 .. $#din ) {
if ( $din[$i] eq 1 ) {
if ( $used_din eq 0 ) {
$CSVData[ $idx++ ] = $Din1;
$used_din = 1;
} else {
$CSVData[$idx++] = $Din2;
}
} elsif ($ain[$i] eq 1) {
if ($used_ain eq 0) {
$CSVData[$idx++] = $Ain1;
else {
$CSVData[ $idx++ ] = $Din2;
}
}
elsif ( $ain[$i] eq 1 ) {
if ( $used_ain eq 0 ) {
$CSVData[ $idx++ ] = $Ain1;
$used_ain = 1;
} else {
$CSVData[$idx++] = $Ain2;
}
} elsif ($din[$i] eq 2) {
$CSVData[$idx++] = $Din1 . ";" . $Din2;
} elsif ($ain[$i] eq 2) {
$CSVData[$idx++] = $Ain1 . ";" . $Ain2;
} else {
$CSVData[$idx++] = "N/A";
else {
$CSVData[ $idx++ ] = $Ain2;
}
}
elsif ( $din[$i] eq 2 ) {
$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 ) =
split( /;/, $NodeData );
$CSVData[0] = $Vbat . ";" . $Tmod;
my ( $y, $m, $d, $t ) = split( /[\s\/]/, $first );
my ( $h, $min, $sec ) = split( /:/, $t );
$GDEventDate = $y . '-' . $m . '-' . $d;
$CSVData[1] = "DT". substr( $tool, 2, 4 ) . ';'. $h . ':'. ( $min - 1 ) . ';'. $h . ':'. ( $min + 1 );
}else {
$CSVData[1] = "DT"
. substr( $tool, 2, 4 ) . ';'
. $h . ':'
. ( $min - 1 ) . ';'
. $h . ':'
. ( $min + 1 );
}
else {
@CSVData = split( /\|/, $NodeData );
}
@@ -542,17 +643,19 @@ while ( my $line = <FILE> ) {
if ( $nodenum eq 0 ) {
$toolbatt = $data[0];
$tooltemp = $data[1];
}else {
}
else {
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;
$y = $d;
$m = sprintf('%02d',$m);
$d = sprintf('%02d',$w);
$m = sprintf( '%02d', $m );
$d = sprintf( '%02d', $w );
}
foreach (@data) {
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 ) ] .= ",'" . $_ . "'";
}
@@ -561,7 +664,8 @@ while ( my $line = <FILE> ) {
if ( ++$outcount % $maxsqllines eq 0 ) {
$sql[ ( $outcount % $maxsqllines ) - 1 ] .= ";\n";
writeOutSql($tool);
}else {
}
else {
$sql[ ( $outcount % $maxsqllines ) - 1 ] .= ",\n";
}
}
@@ -575,7 +679,8 @@ $sql[ ( $outcount % $maxsqllines ) - 1 ] =~ s/,$/;/g;
writeOutSql($tool);
if ( $tooltype eq "GD" ) {
print getTimeStamp("log") . " - pid $$ >> tool GD: nothing to do.\n";
}else {
}
else {
matlabCalc();
if ($ftp_send) {

View File

@@ -19,7 +19,7 @@ my $db_sp = 'ase_lar';
my $server = 'localhost';
my $db_name = "ase_lar";
my @sql;
my ($unit, $tool);
my ( $unit, $tool );
my $matlab_timestamp = "";
my $ftp_addrs;
my $ftp_user;
@@ -29,36 +29,42 @@ my $ftp_filename;
my $ftp_target;
my $duedate = '';
sub getTimeStamp{ # parm [ts] => timestamp for filename; log => timestamp for log
sub getTimeStamp
{ # parm [ts] => timestamp for filename; log => timestamp for log
my $format = "%04d%02d%02d%02d%02d%02d";
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" ) {
$format = "%04d%02d%02d %02d:%02d:%02d";
}
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";
}
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;
}
sub trxelab {
my $dbh =DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password )
or die getTimeStamp("log"). " - pid $$ >> Could not connect to database: $DBI::errstr";
my $dbh =
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(
'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 . '";'
) 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 {
}
else {
while ( my $results = $sth->fetchrow_hashref ) {
$ftp_addrs = $results->{'ftp_addrs'};
$ftp_user = $results->{'ftp_user'};
@@ -76,11 +82,19 @@ sub trxelab {
my $fileelab;
if ( $ftp_filename eq "" ) {
$fileelab ='/var/lib/mysql-files/'. $tool . '_'. getTimeStamp(). '.csv'; #mettere quello che si prende da query *** aggiungere $unit
}else {
$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';
$fileelab =
'/var/lib/mysql-files/'
. $ftp_filename . '_'
. getTimeStamp() . '.csv';
}
my $sthdo = $dbh->do(
@@ -105,45 +119,64 @@ sub trxelab {
$ftp_parm //= "";
$ftp_parm =~ s/\s//g;
my %ftp_parms = ('Host' => $ftp_addrs,);
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);
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);
print getTimeStamp("log")
. " - pid $$ >> $unit - $tool ftp parm:\n"
. Dumper(%ftp_parms);
if ( !defined $duedate
or($duedate eq '0000-00-00 00:00:00')
or($duedate eq '')
or($duedate gt getTimeStamp("db_ts") )) {
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";
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";
if ( $ftp_parms{"SSL"} ) {
$ftp->starttls();
}
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";
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)
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;
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";
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;
}