r8615@llin: dpavlin | 2005-10-16 19:41:44 +0200
authordpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sun, 16 Oct 2005 17:41:52 +0000 (17:41 +0000)
committerdpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sun, 16 Oct 2005 17:41:52 +0000 (17:41 +0000)
 added sort into archive to backup medium, small updates

git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/BackupPC/trunk@217 8392b6e1-25fa-0310-8288-cc32f8e212ea

Makefile
doc/Search.pm
lib/BackupPC/CGI/BurnMedia.pm
lib/BackupPC/SearchLib.pm

index 552dde7..e2cbf33 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -62,7 +62,7 @@ profile: test
        mv $(profile_file) profile.`perl -e 'my @p = glob("profile.[0-9]*"); print scalar @p + 1'`
 
 inc: test
-       sudo -u backuppc /data/backuppc/bin/BackupPC_incPartsUpdate
+       sudo -u backuppc /data/backuppc/bin/BackupPC_incPartsUpdate -c -d
        
 burn: test
        sudo /data/backuppc/bin/BackupPC_burnArchiveCLI
index 63908a6..c867ed0 100644 (file)
@@ -113,6 +113,8 @@ You will also need a few additional cpan modules
 
 =item Term::Menus
 =item XML::Writer
+=item Algorithm::Diff
+=item Archive::Tar::Stream
 
 =back
 
index e01f9cb..3b7e8c6 100644 (file)
@@ -31,7 +31,7 @@ sub action() {
 EOF
              
                $cont .= "Backups that have not been archived:<br>";
-               $cont .= BackupPC::SearchLib::displayBackupsGrid();
+               $cont .= BackupPC::SearchLib::displayBackupsGrid( \%In );
            
        } else {
 
index d2e0abd..e9d3065 100644 (file)
@@ -121,45 +121,64 @@ sub getWhere($) {
 }
 
 my $sort_def = {
-       default => 'date_a',
-       sql => {
-               share_d => 'shares.name DESC',
-               share_a => 'shares.name ASC',
-               path_d => 'files.path DESC',
-               path_a => 'files.path ASC',
-               num_d => 'files.backupnum DESC',
-               num_a => 'files.backupnum ASC',
-               size_d => 'files.size DESC',
-               size_a => 'files.size ASC',
-               date_d => 'files.date DESC',
-               date_a => 'files.date ASC',
-       },
-       est => {
-               share_d => 'sname STRD',
-               share_a => 'sname STRA',
-               path_d => 'filepath STRD',
-               path_a => 'filepath STRA',
-               num_d => 'backupnum NUMD',
-               num_a => 'backupnum NUMA',
-               size_d => 'size NUMD',
-               size_a => 'size NUMA',
-               date_d => 'date NUMD',
-               date_a => 'date NUMA',
+       search => {
+               default => 'date_a',
+               sql => {
+                       share_d => 'shares.name DESC',
+                       share_a => 'shares.name ASC',
+                       path_d => 'files.path DESC',
+                       path_a => 'files.path ASC',
+                       num_d => 'files.backupnum DESC',
+                       num_a => 'files.backupnum ASC',
+                       size_d => 'files.size DESC',
+                       size_a => 'files.size ASC',
+                       date_d => 'files.date DESC',
+                       date_a => 'files.date ASC',
+               },
+               est => {
+                       share_d => 'sname STRD',
+                       share_a => 'sname STRA',
+                       path_d => 'filepath STRD',
+                       path_a => 'filepath STRA',
+                       num_d => 'backupnum NUMD',
+                       num_a => 'backupnum NUMA',
+                       size_d => 'size NUMD',
+                       size_a => 'size NUMA',
+                       date_d => 'date NUMD',
+                       date_a => 'date NUMA',
+               }
+       }, burn => {
+               default => 'date_a',
+               sql => {
+                       share_d => 'share DESC',
+                       share_a => 'share ASC',
+                       num_d => 'backupnum DESC',
+                       num_a => 'backupnum ASC',
+                       date_d => 'date DESC',
+                       date_a => 'date ASC',
+                       age_d => 'age DESC',
+                       age_a => 'age ASC',
+                       size_d => 'size DESC',
+                       size_a => 'size ASC',
+                       incsize_d => 'inc_size DESC',
+                       incsize_a => 'inc_size ASC',
+               }
        }
 };
 
-sub getSort($$) {
-       my ($type, $sort_order) = @_;
+sub getSort($$$) {
+       my ($part,$type, $sort_order) = @_;
 
-       $sort_order ||= $sort_def->{'default'};
+       die "unknown part: $part" unless ($sort_def->{$part});
+       die "unknown type: $type" unless ($sort_def->{$part}->{$type});
 
-       die "unknown type: $type" unless ($sort_def->{$type});
+       $sort_order ||= $sort_def->{$part}->{'default'};
 
-       if (my $ret = $sort_def->{$type}->{$sort_order}) {
+       if (my $ret = $sort_def->{$part}->{$type}->{$sort_order}) {
                return $ret;
        } else {
                # fallback to default sort order
-               return $sort_def->{$type}->{ $sort_def->{'default'} };
+               return $sort_def->{$part}->{$type}->{ $sort_def->{$part}->{'default'} };
        }
 }
 
@@ -193,7 +212,7 @@ sub getFiles($) {
        my $where = getWhere($param);
        $sql_where = " WHERE ". $where if ($where);
 
-       my $order = getSort('sql', $param->{'sort'});
+       my $order = getSort('search', 'sql', $param->{'sort'});
 
        my $sql_order = qq{
                ORDER BY $order
@@ -295,7 +314,7 @@ sub getFilesHyperEstraier($) {
 
 #      $cond->set_max( $offset + $on_page );
        $cond->set_options( $HyperEstraier::Condition::SURE );
-       $cond->set_order( getSort('est', $param->{'sort'} ) );
+       $cond->set_order( getSort('search', 'est', $param->{'sort'} ) );
 
        # get the result of search
        my @res;
@@ -399,11 +418,16 @@ sub getGzipSize($$)
        );
 }
 
-sub getBackupsNotBurned() {
+sub getBackupsNotBurned($) {
 
+       my $param = shift;
        my $dbh = get_dbh();
 
-       my $sql = q{
+       my $order = getSort('burn', 'sql', $param->{'sort'});
+
+print STDERR "## sort=". ($param->{'sort'} || 'no sort param') . " burn sql order: $order\n";
+
+       my $sql = qq{
                SELECT 
                        backups.hostID AS hostID,
                        hosts.name AS host,
@@ -411,6 +435,7 @@ sub getBackupsNotBurned() {
                        backups.num AS backupnum,
                        backups.type AS type,
                        backups.date AS date,
+                       date_part('epoch',now()) - backups.date as age,
                        backups.size AS size,
                        backups.id AS id,
                        backups.inc_size AS inc_size,
@@ -432,14 +457,15 @@ sub getBackupsNotBurned() {
                        backups.size,
                        backups.inc_size,
                        backups.parts
-               ORDER BY backups.date
+               ORDER BY $order
        };
        my $sth = $dbh->prepare( $sql );
        my @ret;
        $sth->execute();
 
        while ( my $row = $sth->fetchrow_hashref() ) {
-               $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
+               $row->{'age'} = sprintf("%0.1f", ( $row->{'age'} / 86400 ) );
+               #$row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
                $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
 
                # do some cluster calculation (approximate) and convert to kB
@@ -450,7 +476,9 @@ sub getBackupsNotBurned() {
        return @ret;      
 }
 
-sub displayBackupsGrid() {
+sub displayBackupsGrid($) {
+
+       my $param = shift;
 
        my $retHTML .= q{
                <form id="forma" method="POST" action="}.$MyURL.q{?action=burn">
@@ -785,15 +813,18 @@ EOF3
                        <td class="tableheader">
                                <input type="checkbox" name="allFiles" id="allFiles" onClick="checkAll('allFiles');">
                        </td>
-                       <td align="center">Share</td>
-                       <td align="center">Backup no</td>
+       } .
+               sort_header($param, 'Share', 'share', 'center') .
+               sort_header($param, '#', 'num', 'center') .
+       qq{
                        <td align="center">Type</td>
-                       <td align="center">date</td>
-                       <td align="center">age/days</td>
-                       <td align="center">size/MB</td>
-                       <td align="center">gzip size/kB</td>
+       } .
+               sort_header($param, 'Date', 'date', 'center') .
+               sort_header($param, 'Age/days', 'age', 'center') .
+               sort_header($param, 'Size/Mb', 'size', 'center') .
+               sort_header($param, 'gzip size/Kb', 'incsize', 'center') .
+       qq{
                        </tr>
-
        };
 
        my @color = (' bgcolor="#e0e0e0"', '');
@@ -801,7 +832,7 @@ EOF3
        my $i = 0;
        my $host = '';
 
-       foreach my $backup ( getBackupsNotBurned() ) {
+       foreach my $backup ( getBackupsNotBurned($param) ) {
 
                if ($host ne $backup->{'host'}) {
                        $i++;
@@ -884,12 +915,14 @@ sub displayGrid($) {
                <td></td>
        };
 
-       my ($sort_what, $sort_dir) = split(/_/,$param->{'sort'},2);
+       sub sort_header($$$$) {
+               my ($param, $display, $name, $align) = @_;
 
-       sub sort_header($$$) {
-               my ($param, $display, $name) = @_;
+               my ($sort_what, $sort_dir) = split(/_/,$param->{'sort'},2);
 
-               my $html = '<td align="center"';
+               my $old_sort = $param->{'sort'};
+
+               my $html = qq{<td align="$align"};
                if (lc($sort_what) eq lc($name)) {
                        my $dir = lc($sort_dir);
                        $dir =~ tr/ad/da/;
@@ -899,15 +932,17 @@ sub displayGrid($) {
                        $param->{'sort'} = $name . '_a';
                }
                $html .= '<a href="' . page_uri($param) . '">' . $display . '</a></td>';
+               $param->{'sort'} = $old_sort;
+
                return $html;
        }
 
        $retHTML .=
-               sort_header($param, 'Share', 'share') .
-               sort_header($param, 'Type and Name', 'path') .
-               sort_header($param, '#', 'num') .
-               sort_header($param, 'Size', 'size') .
-               sort_header($param, 'Date', 'date');
+               sort_header($param, 'Share', 'share', 'center') .
+               sort_header($param, 'Type and Name', 'path', 'center') .
+               sort_header($param, '#', 'num', 'center') .
+               sort_header($param, 'Size', 'size', 'center') .
+               sort_header($param, 'Date', 'date', 'center');
 
        $retHTML .= qq{
                <td align="center">Media</td>