[freeside-commits] branch FREESIDE_3_BRANCH updated. 2b3eb91eaa841175eeb9f998a4457427670e7df0

Jonathan Prykop jonathan at 420.am
Tue Nov 3 18:34:43 PST 2015


The branch, FREESIDE_3_BRANCH has been updated
       via  2b3eb91eaa841175eeb9f998a4457427670e7df0 (commit)
       via  0953ca94fb6402195f511929afd3327d72e91377 (commit)
      from  26240874c78539a882db57782a0199a8eb92c1e0 (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 2b3eb91eaa841175eeb9f998a4457427670e7df0
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 0953ca94fb6402195f511929afd3327d72e91377
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