X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FCGI%2FBurnMedia.pm;h=1a3a53a6efcc169f1f30592eb81494f1b8a80222;hp=7d7eff31d7537e191a1c6a7a68078f1e3f5c2143;hb=57307aaa251ad94e09d3bf3bf6663d58aa9d7ae7;hpb=c895c85bd282936cd38d900904bd94734fdc8248
diff --git a/lib/BackupPC/CGI/BurnMedia.pm b/lib/BackupPC/CGI/BurnMedia.pm
index 7d7eff3..1a3a53a 100644
--- a/lib/BackupPC/CGI/BurnMedia.pm
+++ b/lib/BackupPC/CGI/BurnMedia.pm
@@ -4,10 +4,7 @@ use strict;
use BackupPC::CGI::Lib qw(:all);
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);
@@ -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{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,28 @@ 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) . 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:
@@ -141,6 +113,11 @@ EOF
}
}
+ $cont .= join(' '
+ , "ArchiveMediaSize:", unit($Conf{ArchiveMediaSize})
+ , "ArchiveChunkSize:", unit($Conf{ArchiveChunkSize})
+ );
+
Header($Lang->{Burn_media}, "", 1, "", $cont);
Trailer();