X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=bin%2FBackupPC_ASA_ArchiveStart;h=e8341f58d5f08f98d05520cddd11caa19aa3c8f2;hp=669a0c142907324a22b421886793d406724db645;hb=c615e1bfc6f2b0604a2658996f5dd6b6cfa9469c;hpb=34311ffcf9578586eb9a2e2a766af24afd0816d4 diff --git a/bin/BackupPC_ASA_ArchiveStart b/bin/BackupPC_ASA_ArchiveStart index 669a0c1..e8341f5 100755 --- a/bin/BackupPC_ASA_ArchiveStart +++ b/bin/BackupPC_ASA_ArchiveStart @@ -47,38 +47,45 @@ no utf8; use lib "/usr/local/BackupPC/lib"; use Getopt::Std; use BackupPC::Lib; +use BackupPC::Search; -use DBI; +use Data::Dump qw(dump); + +my $debug = $ENV{DEBUG} || 0; die("BackupPC::Lib->new failed\n") if ( !(my $bpc = BackupPC::Lib->new) ); my %opts; # no options currently -if ( !getopts("", \%opts) || @ARGV < 3 ) { +if ( !getopts("", \%opts) || @ARGV < 2 ) { print STDERR <Conf(); -my $dbh = DBI->connect($Conf{SearchDSN}, $Conf{SearchUser}, "", { RaiseError => 1, AutoCommit => 0 }); +my $dbh = BackupPC::Search::get_dbh; my $sth = $dbh->prepare(qq{ select backups.id as backup_id, hosts.name as host, - backups.num as num + backups.num as num, + inc_size, + size, + inc_deleted from backups join hosts on hosts.id = hostid - where hosts.name = ? and inc_size < 0 and size > 0 and not inc_deleted + where hosts.name = ? }); my $Hosts = $bpc->HostInfoRead(); -my $ArchiveHost = $ARGV[0]; -my $UserName = $ARGV[1]; +my $ArchiveHost = shift @ARGV; +my $UserName = shift @ARGV; +my @HostFilter = @ARGV; my $TopDir = $bpc->{Conf}{TopDir}; if ( !defined($Hosts->{$ArchiveHost}) ) { @@ -88,31 +95,54 @@ if ( !defined($Hosts->{$ArchiveHost}) ) { $bpc->ConfigRead($ArchiveHost); my(@HostList, @BackupList); -for ( my $i = 2 ; $i < @ARGV ; $i++ ) { - my ($host,$num) = split(/:/,$ARGV[$i],2); - if ( !defined($Hosts->{$host}) ) { - print(STDERR "$0: host $host doesn't exist... quitting\n"); - exit(1); - } - my @backups = $bpc->BackupInfoRead($host); - if ( !@backups ) { - print(STDERR "$0: host $host doesn't have any backups... quitting\n"); - exit(1); - } - - $sth->execute( $host ); - if ( $sth->rows == 0 ) { - warn "no backups to archive on $host\n"; - next; - } - - while ( my $row = $sth->fetchrow_hashref ) { - warn "+ ", $row->{host}, " ", $row->{num}, "\n"; - push(@HostList, $host); - push(@BackupList, $row->{num}); - } + + +my $host_nums; + +foreach my $host ( keys %$Hosts ) { + $host = lc $host; + my @backups = $bpc->BackupInfoRead($host); + if ( !@backups ) { + warn "$0: host $host doesn't have any backups... skipping\n"; + next; + } + $host_nums->{$host} = [ BackupPC::Search::host_backup_nums( $host ) ]; +} + +foreach ( @HostFilter ) { + my ($host,$num) = split(/:/,$_,2); + if ( !defined($Hosts->{$host}) ) { + print(STDERR "$0: host $host doesn't exist... quitting\n"); + exit(1); + } + if ( defined $num ) { + warn "+ $host $num\n"; + push(@HostList, $host); + push(@BackupList, $num); + } else { + foreach my $num ( @{ $host_nums->{$host} } ) { + warn "+ $host $num\n"; + push(@HostList, $host); + push(@BackupList, $num); + } + } +} + +if ( ! @HostFilter ) { + foreach my $host ( keys %$host_nums ) { + foreach my $num ( @{ $host_nums->{$host} } ) { + warn "+ $host $num\n"; + push(@HostList, $host); + push(@BackupList, $num); + } + } } +warn "# HostList=",dump(@HostList),"\n"; +warn "# BackupList=",dump(@BackupList),"\n"; + +$dbh->disconnect; + my $ReqFileName; for ( my $i = 0 ; ; $i++ ) { $ReqFileName="archiveReq.$$.$i"; @@ -127,7 +157,7 @@ my %ArchiveReq = ( compext => $bpc->{Conf}{ArchiveComp} eq 'none' ? '' : ($bpc->{Conf}{ArchiveComp} eq 'gzip' ? '.gz' : '.bz2'), parfile => $bpc->{Conf}{ArchivePar}, - splitsize => '0000000', + splitsize => $bpc->{Conf}{ArchiveSplit} . '000000', # mb -> bytes host => $ArchiveHost, HostList => \@HostList, BackupList => \@BackupList,