[freeside-commits] branch master updated. aba1dd69d21129924d268fae7f24a19a54b80c60

Ivan Kohler ivan at freeside.biz
Tue Mar 13 11:16:21 PDT 2018


The branch, master has been updated
       via  aba1dd69d21129924d268fae7f24a19a54b80c60 (commit)
      from  5f9edcbe9fb3b3eb905614927aa6120d50c06ff1 (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 aba1dd69d21129924d268fae7f24a19a54b80c60
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Tue Mar 13 11:16:20 2018 -0700

    save logging information so we have a historical record of exactly when problems happened, RT#79780

diff --git a/FS/bin/freeside-ipifony-download b/FS/bin/freeside-ipifony-download
index 09e83ea10..b01d80641 100644
--- a/FS/bin/freeside-ipifony-download
+++ b/FS/bin/freeside-ipifony-download
@@ -5,14 +5,15 @@ use Getopt::Std;
 use Date::Format qw(time2str);
 use File::Temp qw(tempdir);
 use Net::SFTP::Foreign;
+use File::Copy qw(copy);
+use Text::CSV;
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw(qsearch qsearchs);
 use FS::cust_main;
 use FS::Conf;
-use File::Copy qw(copy);
-use Text::CSV;
+use FS::Log;
 
-my %opt;
+our %opt;
 getopts('vqNa:P:C:e:', \%opt);
 
 # Product codes that are subject to flat rate E911 charges.  For these 
@@ -105,14 +106,18 @@ if ( $opt{P} =~ /^(\d+)$/ ) {
 
 # for now assume SFTP download as the only method
 my $sftp = sftp_connect($host, $sftpuser, $port);
-die "failed to connect to '$sftpuser\@$host'\n(".$sftp->error.")\n"
-  if $sftp->error;
+if ( $sftp->error ) {
+  my $error = "Connection failed to $sftpuser\@$host: ". $sftp->error.
+              ", giving up.";
+  mylog('critical', $error);
+  die $error;
+}
 
 $sftp->setcwd($path) if $path;
 
 my $files = $sftp->ls('ready', wanted => qr/\.csv$/, names_only => 1);
 if (!@$files) {
-  print STDERR "No charge files found.\n" if $opt{v};
+  mylog('warning',"No charge files found.");
   exit(-1);
 }
 
@@ -122,7 +127,7 @@ my %e911_qty; # custnum => sum of E911-subject quantity
 my %is_e911 = map {$_ => 1} @E911_CODES;
 
 FILE: foreach my $filename (@$files) {
-  print STDERR "Retrieving $filename\n" if $opt{v};
+  mylog('debug', "Retrieving $filename");
   $sftp->get("ready/$filename", "$tmpdir/$filename");
   if($sftp->error) {
     warn "failed to download $filename\n";
@@ -131,7 +136,7 @@ FILE: foreach my $filename (@$files) {
 
   # make sure server archive dir exists
   if ( !$sftp->stat('done') ) {
-    print STDERR "Creating $path/done\n" if $opt{v};
+    mylog('debug',"Creating $path/done");
     $sftp->mkdir('done');
     if($sftp->error) {
       # something is seriously wrong
@@ -146,9 +151,9 @@ FILE: foreach my $filename (@$files) {
 
   #copy to local archive dir
   if ( $opt{a} ) {
-    print STDERR "Copying $tmpdir/$filename to archive dir $opt{a}\n"
-      if $opt{v};
+    mylog('debug', "Copying $tmpdir/$filename to archive dir $opt{a}");
     copy("$tmpdir/$filename", $opt{a});
+    #log too?  what's -a all about anyway?
     warn "failed to copy $tmpdir/$filename to $opt{a}: $!" if $!;
   }
 
@@ -163,7 +168,7 @@ FILE: foreach my $filename (@$files) {
     @hash{@fields} = $csv->fields();
     if ( $hash{custnum} =~ /^cust/ ) {
       # there appears to be a header row
-      print STDERR "skipping header row\n" if $opt{v};
+      mylog('debug', "skipping header row");
       next;
     }
     my $cust_main = 
@@ -172,8 +177,7 @@ FILE: foreach my $filename (@$files) {
       warn "customer #$hash{custnum} not found\n";
       next;
     }
-    print STDERR "Found customer #$hash{custnum}: ".$cust_main->name."\n"
-      if $opt{v};
+    mylog('debug',"Found customer #$hash{custnum}: ".$cust_main->name);
 
     my $amount = sprintf('%.2f',$hash{quantity} * $hash{unit_price});
 
@@ -224,8 +228,7 @@ FILE: foreach my $filename (@$files) {
       }
       $charge_opt{classnum} = $classnum_of{$classname};
     }
-    print STDERR "  Charging $hash{unit_price} * $hash{quantity}\n"
-      if $opt{v};
+    mylog('debug', "  Charging $hash{unit_price} * $hash{quantity}");
     my $error = $cust_main->charge(\%charge_opt);
     if ($error) {
       warn "Error creating charge: $error" if $error;
@@ -268,8 +271,7 @@ foreach my $custnum ( keys (%e911_qty) ) {
 
 $dbh->commit;
 
-if ($opt{v}) {
-  print STDERR "
+mylog('debug', "
 Finished!
   Processed files: @$files
   Created charges: $num_charges
@@ -277,8 +279,7 @@ Finished!
   E911 charges: $num_e911
   E911 lines: $num_lines
   Errors: $num_errors
-";
-}
+");
 
 sub sftp_connect {
   my ($host, $sftpuser, $port) = @_;
@@ -286,7 +287,7 @@ sub sftp_connect {
   my $connection_tries = 1;
 
   while (1) {
-      print STDERR "Connecting to $sftpuser\@$host try number $connection_tries...\n" if $opt{v};
+      mylog('info', "Connecting to $sftpuser\@$host try number $connection_tries...");
       $sftp = Net::SFTP::Foreign->new(
         host      => $host,
         user      => $sftpuser,
@@ -298,13 +299,23 @@ sub sftp_connect {
 
       if ($sftp->error && $connection_tries < 1200) {
         $connection_tries++;
-        print STDERR "Connection failed to $sftpuser\@$host trying again in 60 sec...\n" if $opt{v};
+        mylog('error', "Connection failed to $sftpuser\@$host: ". $sftp->error.
+              ", trying again in 60 sec...");
         sleep 60;
       }
       else { last; }
   }
 
-  return $sftp
+  return $sftp;
+}
+
+our $log;
+sub mylog {
+  my( $level, $message ) = @_;
+  #warn "$message\n" if $opt{v};
+  print STDERR "$message\n" if $opt{v};
+  $log ||= FS::Log->new('freeside-ipifony-download');
+  $log->log(@_);
 }
 
 =head1 NAME
@@ -338,7 +349,8 @@ directory is the one containing the "ready/" and "done/" subdirectories.
 
 =head1 OPTIONAL PARAMETERS
 
--v: Be verbose.
+-v: Be verbose; send debugging information to STDERR in addition to the
+internal log..
 
 -q: Include the quantity and unit price in the charge description.
 

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

Summary of changes:
 FS/bin/freeside-ipifony-download | 58 ++++++++++++++++++++++++----------------
 1 file changed, 35 insertions(+), 23 deletions(-)




More information about the freeside-commits mailing list