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 = "";
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);
} 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::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] <br />";
- }
-
- 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.";
$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 = ?
+ });
+ $sth->execute( $dvd_nr );
+ $cont .= '<table border=1>';
+ while( my $row = $sth->fetchrow_arrayref ) {
+ $cont .= '<tr><td>' . join('</td><td>', @$row) . '</tr><tr>';
+ }
+ $cont .= '</table>';
+
+ $cont .= q{
<br/>with total size of
- <b>} . sprintf("%1.2f Mb", $total_size / 1024 / 1024)
+ <b>} . unit($total_size)
. q{</b>
to media <b>} . $dvd_nr . q{</b>
with following message:
} . $In{'note'} . q{
</div>
};
+
+
}
}
+ $cont .= join(' '
+ , "ArchiveMediaSize:", unit($Conf{ArchiveMediaSize})
+ , "ArchiveChunkSize:", unit($Conf{ArchiveChunkSize})
+ );
+
Header($Lang->{Burn_media}, "", 1, "", $cont);
Trailer();