/[BackupPC]/trunk/lib/BackupPC/SearchLib.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/BackupPC/SearchLib.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 129 by dpavlin, Thu Sep 22 14:25:51 2005 UTC revision 194 by dpavlin, Thu Oct 13 17:11:59 2005 UTC
# Line 8  use DBI; Line 8  use DBI;
8  use DateTime;  use DateTime;
9  use vars qw(%In $MyURL);  use vars qw(%In $MyURL);
10  use Time::HiRes qw/time/;  use Time::HiRes qw/time/;
11    use XML::Writer;
12    use IO::File;
13    
14  my $on_page = 100;  my $on_page = 100;
15  my $pager_pages = 10;  my $pager_pages = 10;
# Line 68  sub dates_from_form($) { Line 70  sub dates_from_form($) {
70                  $mm =~ s/\D//g;                  $mm =~ s/\D//g;
71                  $dd =~ s/\D//g;                  $dd =~ s/\D//g;
72    
73                    my $h = my $m = my $s = 0;
74                    if ($suffix eq 'to') {
75                            $h = 23;
76                            $m = 59;
77                            $s = 59;
78                    }
79    
80                  my $dt = new DateTime(                  my $dt = new DateTime(
81                          year => $yyyy,                          year => $yyyy,
82                          month => $mm,                          month => $mm,
83                          day => $dd                          day => $dd,
84                            hour => $h,
85                            minute => $m,
86                            second => $s,
87                  );                  );
88                  print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";                  print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";
89                  return $dt->epoch || 'NULL';                  return $dt->epoch || 'NULL';
# Line 100  sub getWhere($) { Line 112  sub getWhere($) {
112          push @conditions, qq{ files.date >= $files_from } if ($files_from);          push @conditions, qq{ files.date >= $files_from } if ($files_from);
113          push @conditions, qq{ files.date <= $files_to } if ($files_to);          push @conditions, qq{ files.date <= $files_to } if ($files_to);
114    
115          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" | ",@conditions);          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" and ",@conditions);
116    
117          push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'});          push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'});
118          push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});          push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});
# Line 288  sub getGzipName($$$) Line 300  sub getGzipName($$$)
300          $ret =~ s/\\h/$host/ge;          $ret =~ s/\\h/$host/ge;
301          $ret =~ s/\\s/$share/ge;          $ret =~ s/\\s/$share/ge;
302          $ret =~ s/\\n/$backupnum/ge;          $ret =~ s/\\n/$backupnum/ge;
303            
304            $ret =~ s/__+/_/g;
305    
306          return $ret;          return $ret;
307                    
308  }  }
309    
310    sub get_tgz_size_by_name($) {
311            my $name = shift;
312    
313            my $tgz = $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.$name;
314    
315            my $size = -1;
316    
317            if (-f $tgz) {
318                    $size = (stat($tgz))[7];
319            } elsif (-d $tgz) {
320                    opendir(my $dir, $tgz) || die "can't opendir $tgz: $!";
321                    my @parts = grep { !/^\./ && -f "$tgz/$_" } readdir($dir);
322                    $size = 0;
323                    foreach my $part (@parts) {
324                            $size += (stat("$tgz/$part"))[7] || die "can't stat $tgz/$part: $!";
325                    }
326                    closedir $dir;
327            }
328    
329            return $size;
330    }
331    
332    sub getGzipSize($$)
333    {
334            my ($hostID, $backupNum) = @_;
335            my $sql;
336            my $dbh = get_dbh();
337            
338            $sql = q{
339                                    SELECT hosts.name  as host,
340                                               shares.name as share,
341                                               backups.num as backupnum
342                                    FROM hosts, backups, shares
343                                    WHERE shares.id=backups.shareid AND
344                                              hosts.id =backups.hostid AND
345                                              hosts.id=? AND
346                                              backups.num=?
347                            };
348            my $sth = $dbh->prepare($sql);
349            $sth->execute($hostID, $backupNum);
350    
351            my $row = $sth->fetchrow_hashref();
352    
353            return get_tgz_size_by_name(
354                    getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'})
355            );
356    }
357    
358  sub getBackupsNotBurned() {  sub getBackupsNotBurned() {
359    
360          my $dbh = get_dbh();          my $dbh = get_dbh();
# Line 302  sub getBackupsNotBurned() { Line 364  sub getBackupsNotBurned() {
364                          backups.hostID AS hostID,                          backups.hostID AS hostID,
365                          hosts.name AS host,                          hosts.name AS host,
366                          shares.name AS share,                          shares.name AS share,
367                          backups.id AS backupnum,                          backups.num AS backupnum,
368                          backups.type AS type,                          backups.type AS type,
369                          backups.date AS date,                          backups.date AS date,
370                          backups.size AS size                          backups.size AS size,
371                            backups.id AS id,
372                            backups.inc_size AS inc_size
373                  FROM backups                  FROM backups
374                  INNER JOIN shares       ON backups.shareID=shares.ID                  INNER JOIN shares       ON backups.shareID=shares.ID
375                  INNER JOIN hosts        ON backups.hostID = hosts.ID                  INNER JOIN hosts        ON backups.hostID = hosts.ID
376                  LEFT OUTER JOIN archive_backup ON archive_backup.backup_id = backups.id AND archive_backup.backup_id IS NULL                  LEFT OUTER JOIN archive_backup ON archive_backup.backup_id = backups.id
377                  WHERE backups.size > 0                  WHERE backups.inc_size > 0 AND backups.inc_deleted is false AND archive_backup.backup_id IS NULL
378                  GROUP BY                  GROUP BY
379                          backups.hostID,                          backups.hostID,
380                          hosts.name,                          hosts.name,
# Line 320  sub getBackupsNotBurned() { Line 384  sub getBackupsNotBurned() {
384                          backups.id,                          backups.id,
385                          backups.type,                          backups.type,
386                          backups.date,                          backups.date,
387                          backups.size                          backups.size,
388                            backups.inc_size
389                  ORDER BY backups.date                  ORDER BY backups.date
390          };          };
391          my $sth = $dbh->prepare( $sql );          my $sth = $dbh->prepare( $sql );
# Line 330  sub getBackupsNotBurned() { Line 395  sub getBackupsNotBurned() {
395          while ( my $row = $sth->fetchrow_hashref() ) {          while ( my $row = $sth->fetchrow_hashref() ) {
396                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
397                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
398                  my (undef,undef,undef,undef,undef,undef,undef,$fs_size,undef,undef,undef,undef,undef) =  
399                          stat( $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.                  # do some cluster calculation (approximate) and convert to kB
400                                  getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'}));                  $row->{'inc_size'} = int(($row->{'inc_size'} + 1023 ) / ( 2 * 1024 ) * 2);
                 $row->{'fs_size'} = $fs_size;  
401                  push @ret, $row;                  push @ret, $row;
402          }          }
403                
# Line 343  sub getBackupsNotBurned() { Line 407  sub getBackupsNotBurned() {
407  sub displayBackupsGrid() {  sub displayBackupsGrid() {
408    
409          my $retHTML .= q{          my $retHTML .= q{
410                  <form id="forma" method="POST" action=};                  <form id="forma" method="POST" action="}.$MyURL.q{?action=burn">
                 $retHTML .= "\"".$MyURL."\"";  
                 $retHTML .= q{?action=burn>  
411          };          };
412    
413          $retHTML .= <<'EOF3';          $retHTML .= <<'EOF3';
414  <style>  <style type="text/css">
415  <!--  <!--
416    DIV#fixedBox {
 div#fixedBox {  
417          position: absolute;          position: absolute;
418          bottom: 1em;          top: 50em;
419          left: 0.5em;          left: -24%;
420          padding: 0.5em;          padding: 0.5em;
421          width: 10em;          width: 20%;
422          background: #e0f0e0;          background-color: #E0F0E0;
423          border: 1px solid #00ff00;          border: 1px solid #00C000;
 }  
 @media screen {  
         div#fixedBox {  
                 position: fixed;  
         }  
         /* Don't do this at home */  
         * html {  
                 overflow-y: hidden;  
         }  
         * html body {  
                 overflow-y: auto;  
                 height: 100%;  
                 padding: 0 1em 0 12em;  
                 font-size: 100%;  
         }  
         * html div#fixedBox {  
                 position: absolute;      
         }  
         /* All done. */  
424  }  }
425    
426  #mContainer {  DIV#fixedBox, DIV#fixedBox INPUT, DIV#fixedBox TEXTAREA {
427          position: relative;          font-size: 10pt;
         width: 100%;  
         height: 1.1em;  
         padding: 0px;  
         border: 1px solid #000000;  
428  }  }
429    
430  #gradient {  FORM>DIV#fixedBox {
431          position: absolute;          position: fixed !important;
432          top: 0px;          left: 0.5em !important;
433          left: 0px;          top: auto !important;
434          width: 100%;          bottom: 1em !important;
435          height: 100%;          width: 15% !important;
436    }
437    
438    DIV#fixedBox INPUT[type=text], DIV#fixedBox TEXTAREA {
439            border: 1px solid #00C000;
440    }
441    
442    DIV#fixedBox #note {
443          display: block;          display: block;
444          background-color: #ffff00;          width: 100%;
445  }  }
446    
447  #mask {  DIV#fixedBox #submitBurner {
448          position: absolute;          display: block;
         top: 0px;  
         left: 0px;  
449          width: 100%;          width: 100%;
450            margin-top: 0.5em;
451            cursor: pointer;
452    }
453    
454    * HTML {
455            overflow-y: hidden;
456    }
457    
458    * HTML BODY {
459            overflow-y: auto;
460          height: 100%;          height: 100%;
461          display: block;          font-size: 100%;
         font-size: 1px;  
         background-color: #FFFFFF;  
         overflow: hidden;  
462  }  }
463    
464  #progressIndicator {  * HTML DIV#fixedBox {
465          position: absolute;          position: absolute;
466          top: 0px;  }
467          left: 0px;  
468          width: 100%;  #mContainer, #gradient, #mask, #progressIndicator {
         height: 100%;  
469          display: block;          display: block;
470          font-weight: bold;          width: 100%;
         color: #404040;  
471          font-size: 10pt;          font-size: 10pt;
472            font-weight: bold;
473          text-align: center;          text-align: center;
474            vertical-align: middle;
475            padding: 1px;
476    }
477    
478    #gradient, #mask, #progressIndicator {
479            left: 0;
480            border-width: 1px;
481            border-style: solid;
482            border-color: #000000;
483            color: #404040;
484            margin: 0.4em;
485            position: absolute;
486            margin-left: -1px;
487            margin-top: -1px;
488            margin-bottom: -1px;
489            overflow: hidden;
490    }
491    
492    #mContainer {
493            display: block;
494            position: relative;
495            padding: 0px;
496            margin-top: 0.4em;
497            margin-bottom: 0.5em;
498    }
499    
500    #gradient {
501            z-index: 1;
502            background-color: #FFFF00;
503  }  }
504    
505    #mask {
506            z-index: 2;
507            background-color: #FFFFFF;
508    }
509    
510    #progressIndicator {
511            z-index: 3;
512            background-color: transparent;
513    }
514  -->  -->
515  </style>  </style>
516  <script language="javascript" type="text/javascript">  <script type="text/javascript">
517  <!--  <!--
518    
519  var debug_div = null;  var debug_div = null;
520  var media_size = 4400 * 1024;  EOF3
521    
522            # take maximum archive size from configuration
523            $retHTML .= 'var media_size = '. $Conf{MaxArchiveSize} .';';
524    
525            $retHTML .= <<'EOF3';
526    
527  function debug(msg) {  function debug(msg) {
528  //      return; // Disable debugging  //      return; // Disable debugging
# Line 460  function element_id(name,element) { Line 552  function element_id(name,element) {
552  }  }
553    
554  function checkAll(location) {  function checkAll(location) {
555          var len = element_id('forma').elements.length;          var f = element_id('forma') || null;
556            if (!f) return false;
557    
558            var len = f.elements.length;
559          var check_all = element_id('allFiles');          var check_all = element_id('allFiles');
560          var suma = 0;          var suma = check_all.checked ? (parseInt(f.elements['totalsize'].value) || 0) : 0;
561    
562          for (var i = 0; i < len; i++) {          for (var i = 0; i < len; i++) {
563                    var e = f.elements[i];
564                  var e = element_id('forma').elements[i];                  if (e.name != 'all' && e.name.substr(0, 3) == 'fcb') {
                 if (e.name != 'all' && e.name.substr(0,3) == 'fcb') {  
565                          if (check_all.checked) {                          if (check_all.checked) {
566                                    if (e.checked) continue;
567                                  var el = element_id("fss" + e.name.substr(3));                                  var el = element_id("fss" + e.name.substr(3));
568                                  var size = parseInt(el.value) || 0;                                  var size = parseInt(el.value) || 0;
569                                  debug('suma: '+suma+' size: '+size);                                  debug('suma: '+suma+' size: '+size);
# Line 487  function checkAll(location) { Line 582  function checkAll(location) {
582  }  }
583    
584  function update_sum(suma) {  function update_sum(suma) {
585          element_id('forma').totalsize.value = suma;          element_id('forma').elements['totalsize'].value = suma;
586          pbar_set(suma, media_size);          pbar_set(suma, media_size);
587          debug('total size: '+suma);          debug('total size: ' + suma);
588  }  }
589    
590  function sumiraj(e) {  function sumiraj(e) {
591          var suma = parseInt(element_id('forma').totalsize.value) || 0;          var suma = parseInt(element_id('forma').elements['totalsize'].value) || 0;
592          var len = element_id('forma').elements.length;          var len = element_id('forma').elements.length;
593          if (e) {          if (e) {
594                  var size = parseInt( element_id("fss" + e.name.substr(3)).value );                  var size = parseInt( element_id("fss" + e.name.substr(3)).value);
595                  if (e.checked) {                  if (e.checked) {
596                          suma += size;                          suma += size;
597                  } else {                  } else {
# Line 518  function sumiraj(e) { Line 613  function sumiraj(e) {
613    
614  /* progress bar */  /* progress bar */
615    
616  var _pbar_width = 0;  var _pbar_width = null;
617  var _pbar_warn = 10;    // change color in last 10%  var _pbar_warn = 10;    // change color in last 10%
618    
619  function pbar_reset() {  function pbar_reset() {
620          element_id("mask").style.left = "0px";          element_id("mask").style.left = "0px";
621          _pbar_width = element_id("mContainer").offsetWidth - 2;          _pbar_width = element_id("mContainer").offsetWidth - 2;
622          element_id("mask").style.width = _pbar_width + "px";          element_id("mask").style.width = _pbar_width + "px";
         element_id("progressIndicator").style.zIndex  = 10;  
623          element_id("mask").style.display = "block";          element_id("mask").style.display = "block";
624            element_id("progressIndicator").style.zIndex  = 10;
625          element_id("progressIndicator").innerHTML = "0";          element_id("progressIndicator").innerHTML = "0";
626  }  }
627    
628  function dec2hex(d) {  function dec2hex(d) {
629          var hch="0123456789ABCDEF";          var hch = '0123456789ABCDEF';
630          var a=d%16;          var a = d % 16;
631          var q=(d-a)/16;          var q = (d - a) / 16;
632          return hch.charAt(q)+hch.charAt(a);          return hch.charAt(q) + hch.charAt(a);
633  }  }
634    
   
635  function pbar_set(amount, max) {  function pbar_set(amount, max) {
636            debug('pbar_set('+amount+', '+max+')');
637    
638          debug('pbar_set( '+amount+' , '+max+' )');          if (_pbar_width == null) {
639                    var _mc = element_id("mContainer");
640          curWidth = parseInt(element_id("mask").offsetWidth);                  if (_pbar_width == null) _pbar_width = parseInt(_mc.offsetWidth ? (_mc.offsetWidth - 2) : 0) || null;
641          curLeft = parseInt(element_id("mask").offsetLeft);                  if (_pbar_width == null) _pbar_width = parseInt(_mc.clientWidth ? (_mc.clientWidth + 2) : 0) || null;
642                    if (_pbar_width == null) _pbar_width = 0;
643            }
644    
645          var pcnt = Math.floor( amount * 100 / max );          var pcnt = Math.floor(amount * 100 / max);
646          var p90 = 100 - _pbar_warn;          var p90 = 100 - _pbar_warn;
647          var pcol = pcnt - p90;          var pcol = pcnt - p90;
648          if (pcol < _pbar_warn) {          if (Math.round(pcnt) <= 100) {
649                  if (pcol < 0) pcol = 0;                  if (pcol < 0) pcol = 0;
650                  var e = element_id("submitBurner");                  var e = element_id("submitBurner");
651                  if (e && e.disabled) {                  debug('enable_button');
652                          debug('enable_button');                  e.disabled = false;
653                          var a = e.getAttributeNode('disabled') || null;                  var a = e.getAttributeNode('disabled') || null;
654                          if (a) e.removeAttributeNode(a);                  if (a) e.removeAttributeNode(a);
655                  }          } else {
         } else if (pcol > _pbar_warn) {  
656                  debug('disable button');                  debug('disable button');
657                  pcol = _pbar_warn;                  pcol = _pbar_warn;
658                  var e = element_id("submitBurner");                  var e = element_id("submitBurner");
659                  if (! e.disabled) e.disabled = true;                  if (!e.disabled) e.disabled = true;
660          }          }
661          var col_g = Math.floor( ( _pbar_warn - pcol ) * 255 / _pbar_warn );          var col_g = Math.floor((_pbar_warn - pcol) * 255 / _pbar_warn);
662          var col = '#ff' + dec2hex( col_g ) + '00';          var col = '#FF' + dec2hex(col_g) + '00';
663    
664          //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);          //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);
665          element_id("gradient").style.backgroundColor = col;          element_id("gradient").style.backgroundColor = col;
666    
         var size = parseInt( _pbar_width * amount / max );  
   
         curWidth = _pbar_width - size;  
         curLeft = size ;  
   
         //debug('size: '+size+' curWidth '+curWidth+' curLeft: '+curLeft);  
   
667          element_id("progressIndicator").innerHTML = pcnt + '%';          element_id("progressIndicator").innerHTML = pcnt + '%';
668          //element_id("progressIndicator").innerHTML = amount;          //element_id("progressIndicator").innerHTML = amount;
669    
670          if (curLeft > _pbar_width) {          element_id("mask").style.clip = 'rect(' + Array(
671                  element_id("mask").style.display = "none";                  '0px',
672                  return;                  element_id("mask").offsetWidth + 'px',
673          } else {                  element_id("mask").offsetHeight + 'px',
674                  element_id("mask").style.display = "";                  Math.round(_pbar_width * amount / max) + 'px'
675          }          ).join(' ') + ')';
   
         //if(parseInt(element_id("mask").offsetWidth)>10)  
         element_id("mask").style.width = curWidth + "px";  
         element_id("mask").style.left = curLeft + "px";  
   
676  }  }
677    
678  if (!self.body) self.body = new Object();  if (!self.body) self.body = new Object();
679  self.onload = self.document.onload = self.body.onload = function() {  self.onload = self.document.onload = self.body.onload = function() {
680          pbar_reset();          //pbar_reset();
681          sumiraj();          sumiraj();
682  }  };
683    
684  //-->  // -->
685  </script>  </script>
686  <div id="fixedBox">  <div id="fixedBox">
687    
688  Size:  Size: <input type="text" name="totalsize" size="7" readonly="readonly" style="text-align:right;" value="0" /> kB
 <input type="text" name="totalsize" size="7" readonly>  
689    
690  <div id="mContainer">  <div id="mContainer">
691          <div id="gradient"></div>          <div id="gradient">&nbsp;</div>
692          <div id="mask"></div>          <div id="mask">&nbsp;</div>
693          <div id="progressIndicator">&nbsp;</div>          <div id="progressIndicator">0%</div>
694  </div>  </div>
   
695  <br/>  <br/>
696    
697  Note:  Note:
698  <br/>  <textarea name="note" cols="10" rows="5" id="note"></textarea>
699  <textarea name="note" cols="10" rows="5">  
700  </textarea>  <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner" />
 <br/>  
 <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner">  
701    
702  </div>  </div>
703    <!--
704  <div id="debug" style="float: right; width: 10em; border: 1px #ff0000 solid; background-color: #ffe0e0; -moz-opacity: 0.7;">  <div id="debug" style="float: right; width: 10em; border: 1px #ff0000 solid; background-color: #ffe0e0; -moz-opacity: 0.7;">
705  no debug output yet  no debug output yet
706  </div>  </div>
707    -->
708  EOF3  EOF3
709          $retHTML .= q{          $retHTML .= q{
710                          <input type="hidden" value="burn" name="action">                          <input type="hidden" value="burn" name="action">
# Line 638  EOF3 Line 720  EOF3
720                          <td align="center">date</td>                          <td align="center">date</td>
721                          <td align="center">age/days</td>                          <td align="center">age/days</td>
722                          <td align="center">size/MB</td>                          <td align="center">size/MB</td>
723                          <td align="center">gzip size</td>                          <td align="center">gzip size/kB</td>
724                          </tr>                          </tr>
725    
726          };          };
# Line 656  EOF3 Line 738  EOF3
738                  }                  }
739                  my $ftype = "";                  my $ftype = "";
740    
741                    my $checkbox_key = $backup->{'hostid'}. '_' .$backup->{'backupnum'} . '_' . $backup->{'id'};
742    
743                  $retHTML .=                  $retHTML .=
744                          '<tr' . $color[$i %2 ] . '>                          '<tr' . $color[$i %2 ] . '>
745                          <td class="fview">';                          <td class="fview">';
746                  # FIXME  
747                  $backup->{'fs_size'} = int($backup->{'size'} * 1024);                  if (($backup->{'inc_size'} || 0) > 0) {
                 if (($backup->{'fs_size'} || 0) > 0) {  
748                          $retHTML .= '                          $retHTML .= '
749                          <input type="checkbox" name="fcb' .                          <input type="checkbox" name="fcb' . $checkbox_key . '" value="' . $checkbox_key . '" onClick="sumiraj(this);">';
                         $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  
                         '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  
                         '" onClick="sumiraj(this);">';  
750                  }                  }
751    
752                  $retHTML .=                  $retHTML .=
753                          '</td>' .                          '</td>' .
754                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
# Line 676  EOF3 Line 757  EOF3
757                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
758                          '<td align="center">' . $backup->{'age'} . '</td>' .                          '<td align="center">' . $backup->{'age'} . '</td>' .
759                          '<td align="right">' . $backup->{'size'} . '</td>' .                          '<td align="right">' . $backup->{'size'} . '</td>' .
760                          '<td align="right">' . $backup->{'fs_size'} .                          '<td align="right">' . $backup->{'inc_size'} .
761                          '<input type="hidden" iD="fss'.$backup->{'hostid'}.'_'.$backup->{'backupnum'} . '" value="'. $backup->{'fs_size'} .'"></td>' .                          '<input type="hidden" iD="fss'.$checkbox_key .'" value="'. $backup->{'inc_size'} .'"></td>' .
762    
763                          "</tr>\n";                          "</tr>\n";
764          }          }

Legend:
Removed from v.129  
changed lines
  Added in v.194

  ViewVC Help
Powered by ViewVC 1.1.26