datestamp backups
[freeside.git] / FS / FS / Cron / backup.pm
1 package FS::Cron::backup;
2
3 use strict;
4 use vars qw( @ISA @EXPORT_OK );
5 use Exporter;
6 use FS::UID qw(driver_name datasrc);
7
8 @ISA = qw( Exporter );
9 @EXPORT_OK = qw( backup_scp );
10
11 sub backup_scp {
12   my $conf = new FS::Conf;
13   my $dest = $conf->config('dump-scpdest');
14   $dest .= time2str('/%Y%m%d%H%M%S',time);
15   if ( $dest ) {
16     datasrc =~ /dbname=([\w\.]+)$/ or die "unparsable datasrc ". datasrc;
17     my $database = $1;
18     eval "use Net::SCP qw(scp);";
19     die $@ if $@;
20     if ( driver_name eq 'Pg' ) {
21       system("pg_dump $database >/var/tmp/$database.sql")
22     } else {
23       die "database dumps not yet supported for ". driver_name;
24     }
25     if ( $conf->config('dump-pgpid') ) {
26       eval 'use GnuPG;';
27       die $@ if $@;
28       my $gpg = new GnuPG;
29       $gpg->encrypt( plaintext => "/var/tmp/$database.sql",
30                      output    => "/var/tmp/$database.gpg",
31                      recipient => $conf->config('dump-pgpid'),
32                    );
33       chmod 0600, '/var/tmp/$database.gpg';
34       scp("/var/tmp/$database.gpg", "$dest.gpg");
35       unlink "/var/tmp/$database.gpg" or die $!;
36     } else {
37       chmod 0600, '/var/tmp/$database.sql';
38       scp("/var/tmp/$database.sql", "$dest.sql");
39     }
40     unlink "/var/tmp/$database.sql" or die $!;
41   }
42 }
43
44 1;