summaryrefslogtreecommitdiff
path: root/bin/rotate-cdrs
blob: 7bef0bbb0a1d059c729cc555cdd62770b539fa67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl -w

use strict;
use Fcntl qw(:flock);
use IO::File;

my $dir = '/usr/local/etc/freeside/export/cdr';
#chdir $dir;

#XXX glob might not handle lots of args at some point...
foreach my $file ( glob("$dir/*/CDR*-spool.CSV") ) {

  $file =~ m{(\d+)/CDR(\d+)-spool.CSV$}
    or die "guru meditation #54: can't parse filename: $file\n";
  my($custnum, $date) = ($1, $2);


  my $alpha = 'A';
  while ( -e "$dir/$custnum/CDR$date$alpha.CSV" ) {
    $alpha++; # A -> Z -> AA etc.
  }
  my $newfile = "$dir/$custnum/CDR$date$alpha.CSV";

  rename $file, $newfile
    or die "$! moving $file to $newfile\n";

  use IO::File;
  my $lock = new IO::File ">>$newfile"
    or die "can't open $newfile: $!\n";
  sleep 1; #just in case.  i guess there's still a *remotely* possible
           #race condition, but i'm not losing any sleep over it...  (rimshot)
  flock($lock, LOCK_EX)
    or die "can't lock $newfile: $!\n";
  #okay we've got the lock, any pending write should be done...

  print "$custnum: $newfile\n";

}