show parts archived using view
[BackupPC.git] / lib / BackupPC / CGI / BurnMedia.pm
index 7fce5df..cabd592 100644 (file)
@@ -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,38 +35,21 @@ 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] <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)) {
+
+               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)
@@ -98,40 +81,45 @@ 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 = ?
+                       });
+                       $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>} . unit($total_size)
                        . q{</b>
@@ -141,6 +129,8 @@ EOF
                        } . $In{'note'} . q{
                                </div>
                        };
+
+
                }
        }