X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FCGI%2FBurnMedia.pm;h=c24a5308eb06df2c8b0dcb9eff35f7922ab50df6;hp=bf4dfaffa3cc4e085ece872f4004df66acfd645d;hb=2b50910bc8361e7a9ba99fe1e98b71f6be8dac6b;hpb=aff621b091597104904eafcb4ad6d9fabc2bf7bb diff --git a/lib/BackupPC/CGI/BurnMedia.pm b/lib/BackupPC/CGI/BurnMedia.pm index bf4dfaf..c24a530 100644 --- a/lib/BackupPC/CGI/BurnMedia.pm +++ b/lib/BackupPC/CGI/BurnMedia.pm @@ -18,7 +18,7 @@ sub action() { 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); @@ -35,40 +35,26 @@ EOF } else { - my @selected_backup_ids; + my @selected_backup_parts; - my $total_size = 0; - my $selected = 0; - - 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::Search::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{ArchiveMediaSize} * $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{ArchiveMediaSize} / 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,48 @@ 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' + a.date * INTERVAL '1 second' as date, + size + from archive_backup_parts a + join archive on archive_id = archive.id + 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 +130,16 @@ EOF } . $In{'note'} . q{ }; + + } } + $cont .= join(' ' + , "ArchiveMediaSize:", unit($Conf{ArchiveMediaSize}) + , "ArchiveChunkSize:", unit($Conf{ArchiveChunkSize}) + ); + Header($Lang->{Burn_media}, "", 1, "", $cont); Trailer();