/[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 86 by dpavlin, Sun Aug 28 12:35:59 2005 UTC revision 109 by dpavlin, Thu Sep 1 18:30:51 2005 UTC
# Line 62  sub dates_from_form($) { Line 62  sub dates_from_form($) {
62          sub mk_epoch_date($$) {          sub mk_epoch_date($$) {
63                  my ($name,$suffix) = @_;                  my ($name,$suffix) = @_;
64    
65                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return;                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return undef;
66                  my $mm .= $param->{ $name . '_month_' . $suffix} ||                  my $mm .= $param->{ $name . '_month_' . $suffix} ||
67                          ( $suffix eq 'from' ? 1 : 12);                          ( $suffix eq 'from' ? 1 : 12);
68                  my $dd .= $param->{ $name . '_day_' . $suffix} ||                  my $dd .= $param->{ $name . '_day_' . $suffix} ||
69                          ( $suffix eq 'from' ? 1 : 31);                          ( $suffix eq 'from' ? 1 : 31);
70    
71                    $yyyy =~ s/\D//g;
72                    $mm =~ s/\D//g;
73                    $dd =~ s/\D//g;
74    
75                  my $dt = new DateTime(                  my $dt = new DateTime(
76                          year => $yyyy,                          year => $yyyy,
77                          month => $mm,                          month => $mm,
78                          day => $dd                          day => $dd
79                  );                  );
80                    print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";
81                  return $dt->epoch || 'NULL';                  return $dt->epoch || 'NULL';
82          }          }
83    
84          return (          my @ret = (
85                  mk_epoch_date('search_backup', 'from'),                  mk_epoch_date('search_backup', 'from'),
86                  mk_epoch_date('search_backup', 'to'),                  mk_epoch_date('search_backup', 'to'),
87                  mk_epoch_date('search', 'from'),                  mk_epoch_date('search', 'from'),
88                  mk_epoch_date('search', 'to'),                  mk_epoch_date('search', 'to'),
89          );          );
90    
91            return @ret;
92    
93  }  }
94    
95    
# Line 104  sub getWhere($) { Line 113  sub getWhere($) {
113  }  }
114    
115    
116  sub getFiles($$) {  sub getFiles($) {
117          my ($param, $offset) = @_;          my ($param) = @_;
118    
119            my $offset = $param->{'offset'} || 0;
120            $offset *= $on_page;
121    
122          my $dbh = get_dbh();          my $dbh = get_dbh();
123    
# Line 113  sub getFiles($$) { Line 125  sub getFiles($$) {
125                  files.id                        AS fid,                  files.id                        AS fid,
126                  hosts.name                      AS hname,                  hosts.name                      AS hname,
127                  shares.name                     AS sname,                  shares.name                     AS sname,
                 -- shares.share                 AS sharename,  
128                  files.backupnum                 AS backupnum,                  files.backupnum                 AS backupnum,
                 -- files.name                   AS filename,  
129                  files.path                      AS filepath,                  files.path                      AS filepath,
130                  files.date                      AS date,                  files.date                      AS date,
131                  files.type                      AS type,                  files.type                      AS type,
132                  files.size                      AS size,                  files.size                      AS size
                 -- dvds.name                    AS dvd  
                 null                            AS dvd  
133          };          };
134    
135          my $sql_from = qq{          my $sql_from = qq{
136                  FROM files                  FROM files
137                          INNER JOIN shares       ON files.shareID=shares.ID                          INNER JOIN shares       ON files.shareID=shares.ID
138                          INNER JOIN hosts        ON hosts.ID = shares.hostID                          INNER JOIN hosts        ON hosts.ID = shares.hostID
139                          INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID                          INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = files.shareID
         };  
   
         my $sql_dvd_from = qq{  
                         -- LEFT  JOIN dvds              ON dvds.ID = files.dvdid  
140          };          };
141    
142          my $sql_where;          my $sql_where;
# Line 146  sub getFiles($$) { Line 150  sub getFiles($$) {
150          };          };
151    
152          my $sql_count = qq{ select count(files.id) $sql_from $sql_where };          my $sql_count = qq{ select count(files.id) $sql_from $sql_where };
153          my $sql_results = qq{ select $sql_cols $sql_from $sql_dvd_from $sql_where $sql_order };          my $sql_results = qq{ select $sql_cols $sql_from $sql_where $sql_order };
   
         $offset ||= 0;  
         $offset = ($offset * $on_page);  
154    
155          my $sth = $dbh->prepare($sql_count);          my $sth = $dbh->prepare($sql_count);
156          $sth->execute();          $sth->execute();
# Line 174  sub getFiles($$) { Line 175  sub getFiles($$) {
175          return ($results, \@ret);          return ($results, \@ret);
176  }  }
177    
178  sub getFilesHyperEstraier($$) {  sub getFilesHyperEstraier($) {
179          my ($param, $offset) = @_;          my ($param) = @_;
180    
181            my $offset = $param->{'offset'} || 0;
182            $offset *= $on_page;
183    
184          die "no index_path?" unless ($index_path);          die "no index_path?" unless ($index_path);
185    
# Line 191  sub getFilesHyperEstraier($$) { Line 195  sub getFilesHyperEstraier($$) {
195          my $q = $param->{'search_filename'};          my $q = $param->{'search_filename'};
196          my $shareid = $param->{'search_share'};          my $shareid = $param->{'search_share'};
197    
198          if ($q) {          if (length($q) > 0) {
199                  $q =~ s/(.)/$1 /g;                  # exact match
200                    $cond->add_attr("filepath ISTRINC $q");
201    
202                    $q =~ s/(.)/$1 /g;
203                  # set the search phrase to the search condition object                  # set the search phrase to the search condition object
204                  $cond->set_phrase($q);                  $cond->set_phrase($q);
205            }
206    
207                  my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param);          my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param);
   
                 $cond->add_attr("backup_date NUMGE $backup_from") if ($backup_from);  
                 $cond->add_attr("backup_date NUMLE $backup_to") if ($backup_to);  
208    
209                  $cond->add_attr("date NUMGE $files_from") if ($files_from);          $cond->add_attr("backup_date NUMGE $backup_from") if ($backup_from);
210                  $cond->add_attr("date NUMLE $files_to") if ($files_to);          $cond->add_attr("backup_date NUMLE $backup_to") if ($backup_to);
211    
212                  $cond->add_attr("shareid NUMEQ $shareid") if ($shareid);          $cond->add_attr("date NUMGE $files_from") if ($files_from);
213          }          $cond->add_attr("date NUMLE $files_to") if ($files_to);
214    
215          $offset ||= 0;          $cond->add_attr("shareid NUMEQ $shareid") if ($shareid);
         $offset = ($offset * $on_page);  
216    
217  #       $cond->set_max( $offset + $on_page );  #       $cond->set_max( $offset + $on_page );
218          $cond->set_options( $HyperEstraier::Condition::SURE );          $cond->set_options( $HyperEstraier::Condition::SURE );
# Line 217  sub getFilesHyperEstraier($$) { Line 220  sub getFilesHyperEstraier($$) {
220    
221          # get the result of search          # get the result of search
222          my $result = $db->search($cond, 0);          my $result = $db->search($cond, 0);
         $result->get(0);  
223    
224          my @res;          my @res;
225          my $hits = $result->size;          my $hits = $result->size;
226    
227          # for each document in result          # for each document in result
228          for my $i ($offset .. $result->size-1) {          for my $i ($offset .. ($offset + $on_page - 1)) {
229                    last if ($i >= $hits);
230    
231                  my $id = $result->get($i);                  my $id = $result->get($i);
232                  my $doc = $db->get_doc($id, 0);                  my $doc = $db->get_doc($id, 0);
233    
# Line 237  sub getFilesHyperEstraier($$) { Line 241  sub getFilesHyperEstraier($$) {
241          return ($hits, \@res);          return ($hits, \@res);
242  }  }
243    
244    sub getGzipName($$$)
245    {
246            my ($host, $share, $backupnum) = @_;
247            my $ret = $Conf{GzipSchema};
248            
249            $share =~ s/\//_/g;
250            $ret =~ s/\\h/$host/ge;
251            $ret =~ s/\\s/$share/ge;
252            $ret =~ s/\\n/$backupnum/ge;
253            
254            return $ret;
255            
256    }
257    
258  sub getBackupsNotBurned() {  sub getBackupsNotBurned() {
259    
260          my $dbh = get_dbh();          my $dbh = get_dbh();
# Line 244  sub getBackupsNotBurned() { Line 262  sub getBackupsNotBurned() {
262          SELECT          SELECT
263                  backups.hostID          AS hostid,                  backups.hostID          AS hostid,
264                  min(hosts.name)         AS host,                  min(hosts.name)         AS host,
265                    min(shares.name)        AS share,
266                  backups.num             AS backupnum,                  backups.num             AS backupnum,
267                  min(backups.type)       AS type,                  min(backups.type)       AS type,
268                  min(backups.date)       AS date,                  min(backups.date)       AS date,
# Line 252  sub getBackupsNotBurned() { Line 271  sub getBackupsNotBurned() {
271                  INNER JOIN shares       ON files.shareID=shares.ID                  INNER JOIN shares       ON files.shareID=shares.ID
272                  INNER JOIN hosts        ON hosts.ID = shares.hostID                  INNER JOIN hosts        ON hosts.ID = shares.hostID
273                  INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID                  INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID
         WHERE  
                 files.dvdid     IS NULL  
274          GROUP BY          GROUP BY
275                  backups.hostID, backups.num                  backups.hostID, backups.num, backups.shareid
276          ORDER BY min(backups.date)          ORDER BY min(backups.date)
277          };          };
278          my $sth = $dbh->prepare( $sql );          my $sth = $dbh->prepare( $sql );
# Line 265  sub getBackupsNotBurned() { Line 282  sub getBackupsNotBurned() {
282          while ( my $row = $sth->fetchrow_hashref() ) {          while ( my $row = $sth->fetchrow_hashref() ) {
283                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
284                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
285                    my (undef,undef,undef,undef,undef,undef,undef,$fs_size,undef,undef,undef,undef,undef) =
286                            stat( $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.
287                                    getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'}));
288                    $row->{'fs_size'} = $fs_size;
289                  push @ret, $row;                  push @ret, $row;
290          }          }
291                
# Line 274  sub getBackupsNotBurned() { Line 295  sub getBackupsNotBurned() {
295  sub displayBackupsGrid()  sub displayBackupsGrid()
296    {    {
297        my $retHTML = "";        my $retHTML = "";
       my $addForm = 1;  
298                
299        if ($addForm) {          $retHTML .= <<EOF3;
   
             $retHTML .= <<EOF3;  
300  <script language="javascript" type="text/javascript">  <script language="javascript" type="text/javascript">
301  <!--  <!--
302    
# Line 299  sub displayBackupsGrid() Line 317  sub displayBackupsGrid()
317  //-->  //-->
318  </script>        </script>      
319  EOF3  EOF3
320                $retHTML .= q{<form name="forma" method="GET" action="}."$MyURL"."?action=burn\"";          $retHTML .= q{
321                $retHTML.= q{<input type="hidden" value="burn" name="action">};                  <form name="forma" method="GET" action="$MyURL?action=burn">
322                $retHTML .= q{<input type="hidden" value="results" name="search_results">};                  <input type="hidden" value="burn" name="action">
323          }                  <input type="hidden" value="results" name="search_results">
324          $retHTML .= qq{                  <table style="fview" border="0" cellspacing="0" cellpadding="2">
                 <table style="fview" border="1" cellspacing="0" cellpadding="3">  
325                  <tr class="tableheader">                  <tr class="tableheader">
326          };                  <td class="tableheader">
327                            <input type="checkbox" name="allFiles" onClick="checkAll('allFiles');">
328          if ($addForm) {                  </td>
329              $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";                  <td align="center">Share</td>
         }  
         $retHTML .=  qq{  
                 <td align="center">Host</td>  
330                  <td align="center">Backup no</td>                  <td align="center">Backup no</td>
331                  <td align="center">Type</td>                  <td align="center">Type</td>
332                  <td align="center">date</td>                  <td align="center">date</td>
333                  <td align="center">age/days</td>                  <td align="center">age/days</td>
334                  <td align="center">size/MB</td>                  <td align="center">size/MB</td>
335                    <td align="center">gzip size</td>
336                  </tr>                  </tr>
337    
338                    <tr><td colspan=7 style="tableheader">
339                    <input type="submit" value="Burn selected backups on medium" name="submitBurner">
340                    </td></tr>
341          };          };
342    
343          my @backups = getBackupsNotBurned();          my @color = (' bgcolor="#e0e0e0"', '');
         my $backup;  
344    
345          if ($addForm) {          my $i = 0;
346                  $retHTML .= qq{          my $host = '';
                         <tr><td colspan=7 style="tableheader">  
                         <input type="submit" value="Burn selected backups on medium" name="submitBurner">  
                         </td></tr>  
                 };  
         }  
347    
348          foreach $backup(@backups) {          foreach my $backup ( getBackupsNotBurned() ) {
349    
350                    if ($host ne $backup->{'host'}) {
351                            $i++;
352                            $host = $backup->{'host'};
353                    }
354                  my $ftype = "";                  my $ftype = "";
355                            
356                  $retHTML .= "<tr>";                  $retHTML .= "<tr" . $color[$i %2 ] . ">";
357                  if ($addForm) {                  $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .
                         $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .  
358                                  $backup->{'hostid'}.'_'.$backup->{'backupnum'} .                                  $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
359                                  '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .                                  '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
360                                  '"></td>';                                  '"></td>';
                 }            
361                            
362                  $retHTML .= '<td class="fviewborder">' . $backup->{'host'} . '</td>' .                  $retHTML .=
363                          '<td class="fviewborder">' . $backup->{'backupnum'} . '</td>' .                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
364                          '<td class="fviewborder">' . $backup->{'type'} . '</td>' .                          '<td align="center">' . $backup->{'backupnum'} . '</td>' .
365                          '<td class="fviewborder">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .                          '<td align="center">' . $backup->{'type'} . '</td>' .
366                          '<td class="fviewborder">' . $backup->{'age'} . '</td>' .                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
367                          '<td class="fviewborder">' . $backup->{'size'} . '</td>' .                          '<td align="center">' . $backup->{'age'} . '</td>' .
368                          '</tr>';                          '<td align="right">' . $backup->{'size'} . '</td>' .
369          }                          '<td align="right">' . $backup->{'fs_size'} .'</td>' .
370                            "</tr>\n";
371    
         $retHTML .= "</table>";  
372    
         if ($addForm) {  
                 $retHTML .= "</form>";  
373          }          }
374    
375            $retHTML .= "</table>";
376            $retHTML .= "</form>";
377                
378          return $retHTML;          return $retHTML;
379  }        }      
# Line 373  sub displayGrid($) { Line 389  sub displayGrid($) {
389          my $start_t = time();          my $start_t = time();
390    
391          my ($results, $files);          my ($results, $files);
392          if ($param->{'use_hest'}) {          if ($param->{'use_hest'} && length($hilite) > 0) {
393                  ($results, $files) = getFilesHyperEstraier($param, $offset);                  ($results, $files) = getFilesHyperEstraier($param);
394          } else {          } else {
395                  ($results, $files) = getFiles($param, $offset);                  ($results, $files) = getFiles($param);
396          }          }
397    
398          my $dur_t = time() - $start_t;          my $dur_t = time() - $start_t;
# Line 402  sub displayGrid($) { Line 418  sub displayGrid($) {
418          </div>          </div>
419          <table style="fview" width="100%" border="0" cellpadding="2" cellspacing="0">          <table style="fview" width="100%" border="0" cellpadding="2" cellspacing="0">
420                  <tr class="fviewheader">                  <tr class="fviewheader">
421                    <td></td>
422                  <td align="center">Share</td>                  <td align="center">Share</td>
423                  <td align="center">Type and Name</td>                  <td align="center">Type and Name</td>
424                  <td align="center">#</td>                  <td align="center">#</td>
# Line 426  sub displayGrid($) { Line 443  sub displayGrid($) {
443                  return sprintf(qq{<a href="?action=%s&host=%s&num=%d&share=%s&dir=%s">%s</a>}, $action, @_);                  return sprintf(qq{<a href="?action=%s&host=%s&num=%d&share=%s&dir=%s">%s</a>}, $action, @_);
444          }          }
445    
446            my $i = $offset * $on_page;
447    
448          foreach $file (@{ $files }) {          foreach $file (@{ $files }) {
449                    $i++;
450    
451                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});
452                  $retHTML .= qq{<tr class="fviewborder">};                  $retHTML .= qq{<tr class="fviewborder">};
453    
454                    $retHTML .= qq{<td class="fviewborder">$i</td>};
455    
456                  $retHTML .=                  $retHTML .=
457                          qq{<td class="fviewborder" align="right">} . $file->{'hname'} . ':' . $file->{'sname'} . qq{</td>} .                          qq{<td class="fviewborder" align="right">} . $file->{'hname'} . ':' . $file->{'sname'} . qq{</td>} .
458                          qq{<td class="fviewborder"><img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" alt="$typeStr" align="middle">&nbsp;} . hilite_html( $file->{'filepath'}, $hilite ) . qq{</td>} .                          qq{<td class="fviewborder"><img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" alt="$typeStr" align="middle">&nbsp;} . hilite_html( $file->{'filepath'}, $hilite ) . qq{</td>} .
459                          qq{<td class="fviewborder" align="center">} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupnum'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'filepath'} )}, $file->{'backupnum'} ) . qq{</td>} .                          qq{<td class="fviewborder" align="center">} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupnum'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'filepath'} )}, $file->{'backupnum'} ) . qq{</td>} .
460                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .
461                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .
462                          qq{<td class="fviewborder">} . $file->{'dvd'} . qq{</td>};                          qq{<td class="fviewborder">} . '?' . qq{</td>};
463    
464                  $retHTML .= "</tr>";                  $retHTML .= "</tr>";
465          }          }

Legend:
Removed from v.86  
changed lines
  Added in v.109

  ViewVC Help
Powered by ViewVC 1.1.26