[freeside-commits] branch FREESIDE_4_BRANCH updated. ebc776914af485984d3be6f2c80cc770fcaa0467

Jonathan Prykop jonathan at 420.am
Tue Nov 3 18:25:16 PST 2015


The branch, FREESIDE_4_BRANCH has been updated
       via  ebc776914af485984d3be6f2c80cc770fcaa0467 (commit)
       via  76292792c38a159b2ff22b4913f4d160649a0233 (commit)
      from  25b6a95af7e536f1792f5c9ace78c3748cabbb49 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ebc776914af485984d3be6f2c80cc770fcaa0467
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Tue Nov 3 19:57:54 2015 -0600

    RT#38722: DFH: paymentech upload and download retry [fixed misspelled paymentech]

diff --git a/FS/bin/freeside-paymentech-download b/FS/bin/freeside-paymentech-download
index 1b2f951..9a1f609 100755
--- a/FS/bin/freeside-paymentech-download
+++ b/FS/bin/freeside-paymentech-download
@@ -20,7 +20,7 @@ getopts('vta:');
 
 sub log_and_die {
   my $message = shift;
-  my $log = FS::Log->new('freeside-paymenttech-download');
+  my $log = FS::Log->new('freeside-paymentech-download');
   $log->error($message);
   die $message; 
 }
diff --git a/FS/bin/freeside-paymentech-upload b/FS/bin/freeside-paymentech-upload
index a6e6a5d..5ae147d 100755
--- a/FS/bin/freeside-paymentech-upload
+++ b/FS/bin/freeside-paymentech-upload
@@ -20,7 +20,7 @@ getopts('avtp:');
 
 sub log_and_die {
   my $message = shift;
-  my $log = FS::Log->new('freeside-paymenttech-upload');
+  my $log = FS::Log->new('freeside-paymentech-upload');
   $log->error($message);
   die $message; 
 }

commit 76292792c38a159b2ff22b4913f4d160649a0233
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Fri Oct 30 01:57:46 2015 -0500

    RT#38722: DFH: paymentech upload and download retry

diff --git a/FS/FS/log_context.pm b/FS/FS/log_context.pm
index 403829a..b2126b8 100644
--- a/FS/FS/log_context.pm
+++ b/FS/FS/log_context.pm
@@ -16,6 +16,8 @@ my @contexts = ( qw(
   queue
   upgrade
   upgrade_taxable_billpkgnum
+  freeside-paymentech-upload
+  freeside-paymentech-download
 ) );
 
 =head1 NAME
diff --git a/FS/bin/freeside-paymentech-download b/FS/bin/freeside-paymentech-download
index 16ac3c2..1b2f951 100755
--- a/FS/bin/freeside-paymentech-download
+++ b/FS/bin/freeside-paymentech-download
@@ -11,11 +11,20 @@ use FS::Record qw(qsearch qsearchs);
 use FS::pay_batch;
 use FS::cust_pay_batch;
 use FS::Conf;
+use FS::Log;
 
 use vars qw( $opt_t $opt_v $opt_a );
 getopts('vta:');
 
 #$Net::SFTP::Foreign::debug = -1;
+
+sub log_and_die {
+  my $message = shift;
+  my $log = FS::Log->new('freeside-paymenttech-download');
+  $log->error($message);
+  die $message; 
+}
+
 sub usage { "
   Usage:
       freeside-paymentech-download [ -v ] [ -t ] [ -a archivedir ] user\n
@@ -25,13 +34,13 @@ my $user = shift or die &usage;
 adminsuidsetup $user;
 
 if ( $opt_a ) {
-  die "no such directory: $opt_a\n"
+  log_and_die("no such directory: $opt_a\n")
     unless -d $opt_a;
-  die "archive directory $opt_a is not writable by the freeside user\n"
+  log_and_die("archive directory $opt_a is not writable by the freeside user\n")
     unless -w $opt_a;
 }
 
-my $unzip_check = `which unzip` or die "can't find unzip executable\n";
+my $unzip_check = `which unzip` or log_and_die("can't find unzip executable\n");
 
 #my $tmpdir = File::Temp->newdir();
 my $tmpdir = tempdir( CLEANUP => 1 ); #DIR=>somewhere?
@@ -39,22 +48,31 @@ my $tmpdir = tempdir( CLEANUP => 1 ); #DIR=>somewhere?
 my $conf = new FS::Conf;
 my @batchconf = $conf->config('batchconfig-paymentech');
 # BIN, terminalID, merchantID, username, password
-my $username = $batchconf[3] or die "no Paymentech batch username configured\n";
-my $password = $batchconf[4] or die "no Paymentech batch password configured\n";
+my $username = $batchconf[3] or log_and_die("no Paymentech batch username configured\n");
+my $password = $batchconf[4] or log_and_die("no Paymentech batch password configured\n");
 
 my $host = ($opt_t ? 'orbitalbatchvar.paymentech.net'
                    : 'orbitalbatch.paymentech.net');
 print STDERR "Connecting to $username\@$host...\n" if $opt_v;
 
-my $sftp = Net::SFTP::Foreign->new( host => $host,
-                                    user => $username,
-                                    password => $password,
-                                    timeout => 30,
-                                    );
-die "failed to connect to '$username\@$host'\n(".$sftp->error.")\n" if $sftp->error;
+my $sftp;
+my $ssh_retry      = 25;   # number of times to try connection, needs to be >= 1
+my $ssh_retry_wait = 60*5; # seconds to wait between tries
+while ($ssh_retry > 0) {
+  $sftp = Net::SFTP::Foreign->new( host => $host,
+                                   user => $username,
+                                   password => $password,
+                                   timeout => 30,
+                                 );
+  last unless $sftp->error;
+  $ssh_retry -= 1;
+  sleep($ssh_retry_wait) if $ssh_retry > 0;
+}
+
+log_and_die("failed to connect to '$username\@$host'\n(".$sftp->error.")\n") if $sftp->error;
 
 my @files = map { $_->{filename} } @{ $sftp->ls('.', wanted => qr/_resp\.zip$/) };
-die "no response files found\n" if !@files;
+log_and_die("no response files found\n") if !@files;
 
 BATCH: foreach my $filename (@files) {
 
diff --git a/FS/bin/freeside-paymentech-upload b/FS/bin/freeside-paymentech-upload
index 609019e..a6e6a5d 100755
--- a/FS/bin/freeside-paymentech-upload
+++ b/FS/bin/freeside-paymentech-upload
@@ -11,12 +11,20 @@ use FS::Record qw(qsearch qsearchs);
 use FS::pay_batch;
 use FS::cust_pay_batch;
 use FS::Conf;
+use FS::Log;
 
 use vars qw( $opt_a $opt_t $opt_v $opt_p );
 getopts('avtp:');
 
 #$Net::SFTP::Foreign::debug = -1;
 
+sub log_and_die {
+  my $message = shift;
+  my $log = FS::Log->new('freeside-paymenttech-upload');
+  $log->error($message);
+  die $message; 
+}
+
 sub usage { "
   Usage:
     freeside-paymentech-upload [ -v ] [ -t ] user batchnum
@@ -26,7 +34,7 @@ sub usage { "
 my $user = shift or die &usage;
 adminsuidsetup $user;
 
-my $zip_check = `which zip` or die "can't find zip executable\n";
+my $zip_check = `which zip` or log_and_die("can't find zip executable\n");
 
 my @batches; 
 
@@ -34,21 +42,21 @@ if($opt_a) {
   my %criteria = (status => 'O');
   $criteria{'payby'} = uc($opt_p) if $opt_p;
   @batches = qsearch('pay_batch', \%criteria);
-  die "No open batches found".($opt_p ? " of type '$opt_p'" : '').".\n" 
+  log_and_die("No open batches found".($opt_p ? " of type '$opt_p'" : '').".\n")
     if !@batches;
 }
 else {
   my $batchnum = shift;
-  die &usage if !$batchnum;
+  log_and_die("batchnum not passed\n".&usage) if !$batchnum;
   @batches = qsearchs('pay_batch', { batchnum => $batchnum } );
-  die "Can't find payment batch '$batchnum'\n" if !@batches;
+  log_and_die("Can't find payment batch '$batchnum'\n") if !@batches;
 }
 
 my $conf = new FS::Conf;
 my @batchconf = $conf->config('batchconfig-paymentech');
 # BIN, terminalID, merchantID, username, password
-my $username = $batchconf[3] or die "no Paymentech batch username configured\n";
-my $password = $batchconf[4] or die "no Paymentech batch password configured\n";
+my $username = $batchconf[3] or log_and_die("no Paymentech batch username configured\n");
+my $password = $batchconf[4] or log_and_die("no Paymentech batch password configured\n");
 
 #my $tmpdir = File::Temp->newdir();
 my $tmpdir = tempdir( CLEANUP => 1 ); #DIR=>somewhere?
@@ -61,7 +69,7 @@ foreach my $pay_batch (@batches) {
   print STDERR "Exporting batch $batchnum to $filename...\n" if $opt_v;
   my $text = $pay_batch->export_batch(format => 'paymentech');
   $text =~ s!<fileID>FILEID</fileID>!<fileID>$filename</fileID>! 
-    or die "couldn't find FILEID tag\n";
+    or log_and_die("couldn't find FILEID tag\n");
   open OUT, ">$tmpdir/$filename.xml";
   print OUT $text;
   close OUT;
@@ -69,7 +77,7 @@ foreach my $pay_batch (@batches) {
   system('zip', '-P', $password, '-q', '-j',
            "$tmpdir/$filename.zip", "$tmpdir/$filename.xml");
 
-  die "failed to create zip file\n" if (! -f "$tmpdir/$filename.zip" );
+  log_and_die("failed to create zip file\n") if (! -f "$tmpdir/$filename.zip" );
   push @filenames, $filename;
 }
 
@@ -77,17 +85,26 @@ my $host = ($opt_t ? 'orbitalbatchvar.paymentech.net'
                    : 'orbitalbatch.paymentech.net');
 print STDERR "Connecting to $username\@$host...\n" if $opt_v;
 
-my $sftp = Net::SFTP::Foreign->new( host => $host,
-                                    user => $username,
-                                    password => $password,
-                                    timeout => 30,
-                                    );
-die "failed to connect to '$username\@$host'\n(".$sftp->error.")\n" 
+my $sftp;
+my $ssh_retry      = 25;   # number of times to try connection, needs to be >= 1
+my $ssh_retry_wait = 60*5; # seconds to wait between tries
+while ($ssh_retry > 0) {
+  $sftp = Net::SFTP::Foreign->new( host => $host,
+                                   user => $username,
+                                   password => $password,
+                                   timeout => 30,
+                                 );
+  last unless $sftp->error;
+  $ssh_retry -= 1;
+  sleep($ssh_retry_wait) if $ssh_retry > 0;
+}
+
+log_and_die("failed to connect to '$username\@$host'\n(".$sftp->error.")\n")
     if $sftp->error;
 
 foreach my $filename (@filenames) {
   $sftp->put("$tmpdir/$filename.zip", "$filename.zip")
-    or die "failed to upload file (".$sftp->error.")\n";
+    or log_and_die("failed to upload file (".$sftp->error.")\n");
 }
 
 print STDERR "Finished!\n" if $opt_v;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/log_context.pm                |    2 ++
 FS/bin/freeside-paymentech-download |   42 ++++++++++++++++++++++---------
 FS/bin/freeside-paymentech-upload   |   47 ++++++++++++++++++++++++-----------
 3 files changed, 64 insertions(+), 27 deletions(-)




More information about the freeside-commits mailing list