Ticket #39615 Fix versions for upgrades
[freeside.git] / bin / cdr-transnexus.import
1 #!/usr/bin/perl
2
3 use strict;
4 use Getopt::Std;
5 use Net::SFTP::Foreign;
6 use FS::UID qw(adminsuidsetup datasrc);
7 use FS::cdr;
8
9 ###
10 # parse command line
11 ###
12
13 use vars qw( $opt_p $opt_d $opt_v );
14 getopts('v');
15
16 $opt_p = 'last';
17 $opt_d = 'done';
18
19 my $user = shift or die &usage;
20 adminsuidsetup $user;
21
22 # %%%FREESIDE_CACHE%%%
23 my $cachedir = '/usr/local/etc/freeside/cache.'. datasrc. '/cdrs';
24 mkdir $cachedir unless -d $cachedir;
25
26 #my $format = shift or die &usage;
27 my $format = 'transnexus';
28
29 use vars qw( $servername );
30 $servername = shift or die &usage;
31
32 my $DIR = '/home/ossadmin/OSS/nexoss/CDR_ARCHIVE_BY_ACCOUNT';
33
34 ###
35 # get the file list
36 ###
37
38 warn "Retreiving directory listing\n" if $opt_v;
39
40 my $ls_sftp = sftp();
41
42 my $lsdir = $ls_sftp->ls($DIR);
43
44 ###
45 # import each file in each dir
46 ###
47
48 foreach my $dir ( @$lsdir ) {
49
50   my $dirname = $dir->{filename};
51   warn "Scanning dir $dirname\n" if $opt_v;
52
53   #my $ls = $ls_sftp->ls("$DIR/$dirname", wanted => qr/^$opt_p.*-CDRs$/i );
54   my $ls = $ls_sftp->ls("$DIR/$dirname", wanted => qr/^$opt_p.*Customer-CDRs$/i );
55
56   foreach my $file ( @$ls ) {
57
58     my $filename = $file->{filename};
59     warn "Downloading $filename\n" if $opt_v;
60
61     #get the file
62     my $get_sftp = sftp();
63     $get_sftp->get("$DIR/$dirname/$filename", "$cachedir/$filename")
64       or die "Can't get $filename: ". $get_sftp->error;
65
66     warn "Processing $filename\n" if $opt_v;
67
68     my $error = FS::cdr::batch_import( {
69       'file'            => "$cachedir/$filename",
70       'format'          => $format,
71       'batch_namevalue' => $filename,
72       'empty_ok'        => 1,
73     } );
74     die $error if $error;
75
76     if ( $opt_d ) {
77       my $mv_sftp = sftp();
78       $mv_sftp->mkdir("$DIR/$dirname/$opt_d");
79       $mv_sftp->rename( "$DIR/$dirname/$filename",
80                         "$DIR/$dirname/$opt_d/$filename" )
81         or die "can't move $filename to $opt_d: ". $mv_sftp->error;
82     }
83
84     unlink "$cachedir/$filename";
85
86   }
87
88 }
89
90 ###
91 # subs
92 ###
93
94 sub usage {
95   "Usage: \n  cdr-transnexus.import [ -v ] user [sftpuser@]servername\n";
96 }
97
98 use vars qw( $sftp );
99
100 sub sftp {
101
102   #reuse connections
103   return $sftp if $sftp && $sftp->cwd;
104
105   my %sftp = ( host => $servername );
106
107   $sftp = Net::SFTP::Foreign->new(%sftp);
108   $sftp->error and die "SFTP connection failed: ". $sftp->error;
109
110   $sftp;
111 }
112
113 =head1 NAME
114
115 cdr.sftp_and_import - Download CDR files from a remote server via SFTP
116
117 =head1 SYNOPSIS
118
119   cdr-transnexus.import [ -v ] user [sftpuser@]servername
120
121 =head1 DESCRIPTION
122
123 Command line tool to download CDR files from a remote server via SFTP and then
124 import them into the database.
125
126 -v: verbose
127
128 user: freeside username
129
130 [sftpuser@]servername: remote server
131
132 =head1 BUGS
133
134 Hacked up copy of freeside-cdr-sftp_and_import
135
136 =head1 SEE ALSO
137
138 L<FS::cdr>
139
140 =cut
141
142 1;
143