X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FCGI%2FBurnMedia.pm;h=6b2870b52ef8afe5b9ab9b0ea760a6a478ed88be;hp=8f29a079eb9a8cac45ceaf2c02431dcbcdcbc218;hb=488bb662f6d144d42376b3d14e9b1e438e00e6f8;hpb=ee499dda4d49dfa4d0b51e158c35a565178efde8 diff --git a/lib/BackupPC/CGI/BurnMedia.pm b/lib/BackupPC/CGI/BurnMedia.pm index 8f29a07..6b2870b 100644 --- a/lib/BackupPC/CGI/BurnMedia.pm +++ b/lib/BackupPC/CGI/BurnMedia.pm @@ -2,12 +2,9 @@ package BackupPC::CGI::BurnMedia; use strict; use BackupPC::CGI::Lib qw(:all); -use BackupPC::SearchLib; +use BackupPC::Search; use Data::Dumper; -use vars qw($Cgi %In $MyURL $User %Conf $TopDir $BinDir $bpc); - -my $dsn = $Conf{SearchDSN}; -my $db_user = $Conf{SearchUser} || ''; +use vars qw($Cgi %In $MyURL $User $TopDir $BinDir $bpc); sub action() { my $cont = ""; @@ -15,10 +12,13 @@ sub action() { my $subtitle; my @files; - my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 0 } ); + $bpc->ConfigRead('_search_archive'); + my %Conf = $bpc->Conf; + + my $dbh = DBI->connect($Conf{SearchDSN}, $Conf{SearchUser}, "", { RaiseError => 1, AutoCommit => 0 } ); BackupPC::CGI::Lib::NewRequest(); -# $cont = Dumper(%In); +# $cont = Dumper(\%In); if (!defined($In{submitBurner})) { $title = eval(q{ ${h1($Lang->{Burn_media})}}); $cont = Dumper(%In); @@ -31,44 +31,30 @@ sub action() { EOF $cont .= "Backups that have not been archived:
"; - $cont .= BackupPC::SearchLib::displayBackupsGrid( \%In ); + $cont .= BackupPC::Search::displayBackupsGrid( \%In ); } else { - my @selected_backup_ids; - - my $total_size = 0; - my $selected = 0; + my @selected_backup_parts; - my $parts = 1; foreach my $key(keys(%In)) { - if ($key =~ m/^fcb([0-9]+)_([0-9]+)_([0-9]+)$/gi) { - - my ($host_id, $backup_num, $backup_id) = ($1,$2,$3); - push @selected_backup_ids, $backup_id; - my $currSize = BackupPC::SearchLib::getGzipSizeFromBackupID($backup_id); - my $sth_size = $dbh->prepare(q{select inc_size from backups where id = ?}); - $sth_size -> execute( $backup_id ); - my $db_size = $sth_size->fetchrow_hashref()->{inc_size}; - - if ($db_size != $currSize) { - $cont .= "NOT EQUAL!: [fs_size:$currSize, db_size:$db_size, backup_id:$backup_id]
"; - } - - if ($currSize > 0) { - $total_size += $currSize; - } - $selected++; - - my ($this_part) = $dbh->selectrow_array("select parts from backups where id = ?", undef, $backup_id); - $this_part--; - $parts += $this_part; - } + next unless $key =~ m/^fcb(\d+)/; + push @selected_backup_parts, $1; } - if ($total_size > ($Conf{MaxArchiveSize} * $parts)) { - $cont .= eval( q{ ${h2(Error)}}); - $cont .= "Selected backups size " . sprintf("%1.2f", $total_size / 1024) ." Kb exceed max archive size " . sprintf("%1.2f", $Conf{MaxArchiveSize} / 1024) ." Kb."; + + my ($total_size) = $dbh->selectrow_array( q{ + SELECT sum(size) FROM backup_parts + WHERE id IN ( }.join(',', @selected_backup_parts).q{ ) + }); + + + if ($total_size > ($Conf{ArchiveMediaSize})) { + $cont .= eval(' ${h2(Error)} '); + $cont .= join(' ' + , "Selected backups size", unit($total_size) + , "exceed medium size ", unit($Conf{ArchiveMediaSize}) + ); } elsif ($total_size == 0) { $cont .= eval( q{ ${h2(Error)}}); $cont .= "No backups selected."; @@ -95,42 +81,47 @@ EOF $sth->execute($In{'note'}, $User, $total_size); - foreach my $backup_id (@selected_backup_ids) { - - # link backups with archive - my $sth = $dbh->prepare(q{ - INSERT INTO archive_backup ( - archive_id, backup_id - ) VALUES ( - (SELECT last_value FROM archive_id_seq), ? - ) - }); - - $sth->execute($backup_id); - - $dbh->commit(); - - } + my $sth = $dbh->prepare(q{ + INSERT INTO archive_parts ( + archive_id, backup_part_id + ) VALUES ( + (SELECT last_value FROM archive_id_seq), ? + ) + }); + $sth->execute($_) foreach @selected_backup_parts; my ($dvd_nr) = $dbh->selectrow_array(qq{ select last_value from dvd_nr }); - $dvd_nr ||= 'error'; + die "no dvd_nr" unless $dvd_nr; $dbh->commit(); - my $db_size = 0; - $sth = $dbh->prepare('SELECT SUM(gzip_size) AS suma FROM backups_on_dvds WHERE dvd_nr=?'); - $sth->execute($dvd_nr); - $db_size = $sth->fetchrow_hashref()->{suma}; - $sth->finish(); - $cont .= q{ - Archived following backups: - } . join(", ", @selected_backup_ids) . q{ + Archived following backups parts: + } . join(", ", @selected_backup_parts); + + my $sth = $dbh->prepare(qq{ + select + filename, + part_nr, + TIMESTAMP 'epoch' + date * INTERVAL '1 second' as date, + size + from archive_backup_parts + where dvd_nr = ? + order by backup_part_id + }); + $sth->execute( $dvd_nr ); + $cont .= ''; + while( my $row = $sth->fetchrow_arrayref ) { + $cont .= ''; + } + $cont .= '
' . join('', @$row) . '
'; + + $cont .= q{
with total size of - } . sprintf("%1.2f Mb", $total_size / 1024 / 1024) + } . unit($total_size) . q{ to media } . $dvd_nr . q{ with following message: @@ -138,9 +129,16 @@ EOF } . $In{'note'} . q{ }; + + } } + $cont .= join(' ' + , "ArchiveMediaSize:", unit($Conf{ArchiveMediaSize}) + , "ArchiveChunkSize:", unit($Conf{ArchiveChunkSize}) + ); + Header($Lang->{Burn_media}, "", 1, "", $cont); Trailer();