X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2FCron%2Fbackup.pm;h=65d7acb0b402c3dc5a76813743c483a35582ecfe;hp=5feca26362d2af4b10c68ddfd6812ac9125e5ce7;hb=57bb423fe457ba4e13726877f53bcdf944f828f8;hpb=fb4ab1073f0d15d660c6cdc4e07afebf68ef3924 diff --git a/FS/FS/Cron/backup.pm b/FS/FS/Cron/backup.pm index 5feca2636..65d7acb0b 100644 --- a/FS/FS/Cron/backup.pm +++ b/FS/FS/Cron/backup.pm @@ -6,6 +6,7 @@ use Exporter; use File::Copy; use Date::Format; use FS::UID qw(driver_name datasrc); +use FS::Log @ISA = qw( Exporter ); @EXPORT_OK = qw( backup ); @@ -18,47 +19,80 @@ sub backup { my $filename = time2str('%Y%m%d%H%M%S',time); - datasrc =~ /dbname=([\w\.]+)$/ or die "unparsable datasrc ". datasrc; + datasrc =~ /dbname=([\w\.]+)$/ + or backup_log_and_die($filename,"unparsable datasrc ". datasrc); my $database = $1; my $ext; if ( driver_name eq 'Pg' ) { - system("pg_dump -Fc $database >/var/tmp/$database.Pg"); + system('pg_dump -Fc '. join(' ', map { "--exclude-table-data $_" } + qw( h_cdr h_queue h_queue_arg sessions ) + ). + " $database >/var/tmp/$database.Pg" + ); $ext = 'Pg'; } elsif ( driver_name eq 'mysql' ) { system("mysqldump $database >/var/tmp/$database.sql"); $ext = 'sql'; } else { - die "database dumps not yet supported for ". driver_name; + backup_log_and_die($filename,"database dumps not yet supported for ". driver_name); } chmod 0600, "/var/tmp/$database.$ext"; if ( $conf->config('dump-pgpid') ) { eval 'use GnuPG;'; - die $@ if $@; + backup_log_and_die($filename,$@) if $@; my $gpg = new GnuPG; $gpg->encrypt( plaintext => "/var/tmp/$database.$ext", output => "/var/tmp/$database.gpg", recipient => $conf->config('dump-pgpid'), ); - unlink "/var/tmp/$database.$ext" or die $!; + unlink "/var/tmp/$database.$ext" + or backup_log_and_die($filename,$!); chmod 0600, "/var/tmp/$database.gpg"; $ext = 'gpg'; } if ( $localdest ) { - copy("/var/tmp/$database.$ext", "$localdest/$filename.$ext") or die $!; + copy("/var/tmp/$database.$ext", "$localdest/$filename.$ext") + or backup_log_and_die($filename,$!); chmod 0600, "$localdest/$filename.$ext"; } if ( $scpdest ) { eval "use Net::SCP qw(scp);"; - die $@ if $@; - scp("/var/tmp/$database.$ext", "$scpdest/$filename.$ext"); + backup_log_and_die($filename,$@) if $@; + my $scp = new Net::SCP; + $scp->scp("/var/tmp/$database.$ext", "$scpdest/$filename.$ext") + or backup_log_and_die($filename, $scp->{errstr}); } - unlink "/var/tmp/$database.$ext" or die $!; + unlink "/var/tmp/$database.$ext" or backup_log_and_die($filename,$!); #or just warn? + backup_log($filename); + +} + +#runs backup_log and dies with same error message +sub backup_log_and_die { + my ($filename,$error) = @_; + $error = "backup_log_and_die called without error message" unless $error; + backup_log($filename,$error); + die $error; +} + +#logs result +sub backup_log { + my ($filename,$error) = @_; + my $result = $error ? "FAILED: $error" : 'succeeded'; + my $message = "backup $filename $result\n"; + my $log = FS::Log->new('Cron::backup'); + if ($error) { + $log->error($message); + } else { + $log->info($message); + } + return; } 1;