#!/usr/bin/perl use warnings; use strict; use DBI; use Getopt::Long; use Net::FTP; use File::Basename qw( fileparse ); use List::Util qw( max ); use Data::Dumper qw(Dumper); use Cwd; $|++; # Autoflush my $filename; my $username = 'ase_lar'; my $password = 'laravel'; my $db_lar = 'ase_lar'; my $db_sp = 'ase_lar'; my $server = 'localhost'; my $db_name = "ase_lar"; my @sql; my ($unit, $tool); my $matlab_timestamp = ""; my $ftp_addrs; my $ftp_user; my $ftp_passwd; my $ftp_parm; my $ftp_filename; my $ftp_target; my $duedate = ''; 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()); 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); $format = "%04d-%02d-%02d %02d:%02d:%02d"; } 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 $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" . Dumper(%ftp_parms); 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->login( $ftp_user, $ftp_passwd ) or die getTimeStamp("log"). " - pid $$ >> Cannot login ". $ftp->message . "\n"; if ( $ftp_parms{"SSL"} ) { $ftp->starttls(); } $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( "unit=s" => \$unit, "tool=s" => \$tool ) or die("Error in command line arguments\n"); die("ERROR: unit must be specified.") unless defined $unit; die("ERROR: tool must be specified.") unless defined $tool; $matlab_timestamp = getTimeStamp("db_ts"); trxelab(); print getTimeStamp("log") . " - pid $$ >> Execution ended.\n"; exit;