summaryrefslogtreecommitdiff
path: root/FS/bin
diff options
context:
space:
mode:
Diffstat (limited to 'FS/bin')
-rwxr-xr-xFS/bin/freeside-cdr-telapi-import9
-rw-r--r--FS/bin/freeside-ipifony-download88
-rwxr-xr-xFS/bin/freeside-paymentech-download2
-rwxr-xr-xFS/bin/freeside-paymentech-upload2
4 files changed, 69 insertions, 32 deletions
diff --git a/FS/bin/freeside-cdr-telapi-import b/FS/bin/freeside-cdr-telapi-import
index 4a637f57f..6bb3e4a36 100755
--- a/FS/bin/freeside-cdr-telapi-import
+++ b/FS/bin/freeside-cdr-telapi-import
@@ -35,6 +35,11 @@ GetOptions(
"enddate=s" => \$enddate,
);
+$startdate = str2time($startdate) or die "can't parse start date $startdate\n";
+ $startdate = time2str('%m-%d-%Y', $startdate);
+$enddate = str2time($enddate) or die "can't parse start date $enddate\n";
+ $enddate = time2str('%m-%d-%Y', $enddate);
+
my $fsuser = $ARGV[-1];
die usage() unless $fsuser;
@@ -65,11 +70,13 @@ print $cfh $page;
seek($cfh,0,0);
- print "Importing batch $cdrbatch\n";
+ warn "Importing batch $cdrbatch\n";
my $error = FS::cdr::batch_import({
'batch_namevalue' => $cdrbatch,
'file' => $cfh->filename,
'format' => 'telapi_'.$type
});
+ warn "Error importing CDR's\n".$error if $error;
+
exit; \ No newline at end of file
diff --git a/FS/bin/freeside-ipifony-download b/FS/bin/freeside-ipifony-download
index 10faa7483..1e77c3a75 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
@@ -104,24 +105,19 @@ if ( $opt{P} =~ /^(\d+)$/ ) {
}
# for now assume SFTP download as the only method
-print STDERR "Connecting to $sftpuser\@$host...\n" if $opt{v};
-
-my $sftp = Net::SFTP::Foreign->new(
- host => $host,
- user => $sftpuser,
- port => $port,
- # for now we don't support passwords. use authorized_keys.
- timeout => 30,
- #more => ($opt{v} ? '-v' : ''),
-);
-die "failed to connect to '$sftpuser\@$host'\n(".$sftp->error.")\n"
- if $sftp->error;
+my $sftp = sftp_connect($host, $sftpuser, $port);
+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);
}
@@ -131,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";
@@ -140,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
@@ -155,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 $!;
}
@@ -172,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 =
@@ -181,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});
@@ -233,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;
@@ -277,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
@@ -286,7 +279,43 @@ Finished!
E911 charges: $num_e911
E911 lines: $num_lines
Errors: $num_errors
-";
+");
+
+sub sftp_connect {
+ my ($host, $sftpuser, $port) = @_;
+ my $sftp;
+ my $connection_tries = 1;
+
+ while (1) {
+ mylog('info', "Connecting to $sftpuser\@$host try number $connection_tries...");
+ $sftp = Net::SFTP::Foreign->new(
+ host => $host,
+ user => $sftpuser,
+ port => $port,
+ # for now we don't support passwords. use authorized_keys.
+ timeout => 30,
+ #more => ($opt{v} ? '-v' : ''),
+ );
+
+ if ($sftp->error && $connection_tries < 1200) {
+ $connection_tries++;
+ mylog('error', "Connection failed to $sftpuser\@$host: ". $sftp->error.
+ ", trying again in 60 sec...");
+ sleep 60;
+ }
+ else { last; }
+ }
+
+ 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(level=>$level, message=>$message);
}
=head1 NAME
@@ -320,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.
diff --git a/FS/bin/freeside-paymentech-download b/FS/bin/freeside-paymentech-download
index 9a1f609bc..4d99df2d0 100755
--- a/FS/bin/freeside-paymentech-download
+++ b/FS/bin/freeside-paymentech-download
@@ -62,7 +62,7 @@ while ($ssh_retry > 0) {
$sftp = Net::SFTP::Foreign->new( host => $host,
user => $username,
password => $password,
- timeout => 30,
+ timeout => 300,
);
last unless $sftp->error;
$ssh_retry -= 1;
diff --git a/FS/bin/freeside-paymentech-upload b/FS/bin/freeside-paymentech-upload
index 799e6c42c..770239d8d 100755
--- a/FS/bin/freeside-paymentech-upload
+++ b/FS/bin/freeside-paymentech-upload
@@ -97,7 +97,7 @@ while ($ssh_retry > 0) {
$sftp = Net::SFTP::Foreign->new( host => $host,
user => $username,
password => $password,
- timeout => 30,
+ timeout => 300,
);
last unless $sftp->error;
$ssh_retry -= 1;