--- trunk/lib/BackupPC/SearchLib.pm 2005/08/25 11:41:58 72 +++ trunk/lib/BackupPC/SearchLib.pm 2005/08/28 10:45:51 85 @@ -15,10 +15,17 @@ my $dsn = $Conf{SearchDSN}; my $db_user = $Conf{SearchUser} || ''; +my $dbh; + +sub get_dbh { + $dbh ||= DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } ); + return $dbh; +} + sub getUnits() { my @ret; - my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } ); + my $dbh = get_dbh(); my $sth = $dbh->prepare(qq{ SELECT id, share FROM shares ORDER BY share} ); $sth->execute(); push @ret, { 'id' => '', 'share' => '-'}; # dummy any @@ -26,21 +33,18 @@ while ( my $row = $sth->fetchrow_hashref() ) { push @ret, $row; } - $dbh->disconnect(); return @ret; } sub epoch_to_iso { my $t = shift || return; - $t += 60 * 60 * +2; # FIXME add TZ - my $dt = DateTime->from_epoch( epoch => $t ) || return; - print STDERR "BUG: $t != " . $dt->epoch . "\n" unless ($t == $dt->epoch); - return $dt->ymd . ' ' . $dt->hms; + my $iso = BackupPC::Lib::timeStamp($t); + $iso =~ s/\s/ /g; + return $iso; } -sub getWhere($) { - my ($param) = @_; - my @conditions; +sub dates_from_form($) { + my $param = shift || return; sub mk_epoch_date($$) { my ($name,$suffix) = @_; @@ -58,34 +62,39 @@ return $dt->epoch || 'NULL'; } - my $backup_from = mk_epoch_date('search_backup', 'from'); + return ( + mk_epoch_date('search_backup', 'from'), + mk_epoch_date('search_backup', 'to'), + mk_epoch_date('search', 'from'), + mk_epoch_date('search', 'to'), + ); +} + + +sub getWhere($) { + my $param = shift || return; + + my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param); + + my @conditions; push @conditions, qq{ backups.date >= $backup_from } if ($backup_from); - my $backup_to = mk_epoch_date('search_backup', 'to'); push @conditions, qq{ backups.date <= $backup_to } if ($backup_to); - - my $files_from = mk_epoch_date('search', 'from'); push @conditions, qq{ files.date >= $files_from } if ($files_from); - my $files_to = mk_epoch_date('search', 'to'); push @conditions, qq{ files.date <= $files_to } if ($files_to); print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" | ",@conditions); - - push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'}); + push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'}); push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'}); - return ( - join(" and ", @conditions), - $files_from, $files_to, - $backup_from, $backup_to - ); + return join(" and ", @conditions); } sub getFiles($$) { - my ($where, $offset) = @_; + my ($param, $offset) = @_; - my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } ); + my $dbh = get_dbh(); my $sql_cols = qq{ files.id AS fid, @@ -98,7 +107,8 @@ files.date AS date, files.type AS filetype, files.size AS size, - dvds.name AS dvd + -- dvds.name AS dvd + null AS dvd }; my $sql_from = qq{ @@ -109,10 +119,11 @@ }; my $sql_dvd_from = qq{ - LEFT JOIN dvds ON dvds.ID = files.dvdid + -- LEFT JOIN dvds ON dvds.ID = files.dvdid }; my $sql_where; + my $where = getWhere($param); $sql_where = " WHERE ". $where if ($where); my $sql_order = qq{ @@ -160,13 +171,12 @@ } $sth->finish(); - $dbh->disconnect(); return ($results, \@ret); } sub getBackupsNotBurned() { - my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } ); + my $dbh = get_dbh(); my $sql = q{ SELECT backups.hostID AS hostid, @@ -175,8 +185,10 @@ min(backups.type) AS type, min(backups.date) AS date, min(backups.size) AS size - FROM backups - INNER JOIN hosts ON hosts.ID = backups.hostID + FROM files + INNER JOIN shares ON files.shareID=shares.ID + INNER JOIN hosts ON hosts.ID = shares.hostID + INNER JOIN backups ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID WHERE files.dvdid IS NULL GROUP BY @@ -228,18 +240,21 @@ $retHTML.= q{}; $retHTML .= q{}; } - $retHTML .= qq{}; + $retHTML .= qq{ +
+ + }; if ($addForm) { $retHTML .= ""; } $retHTML .= qq{ - - - - - - + + + + + + }; @@ -284,13 +299,17 @@ return $retHTML; } -sub displayGrid($$$$) { - my ($where, $addForm, $offset, $hilite) = @_; +sub displayGrid($$) { + my ($param, $addForm) = @_; + + my $offset = $param->{'offset'}; + my $hilite = $param->{'search_filename'}; + my $retHTML = ""; my $start_t = time(); - my ($results, $files) = getFiles($where, $offset); + my ($results, $files) = getFiles($param, $offset); my $dur_t = time() - $start_t; my $dur = sprintf("%0.4fs", $dur_t); @@ -317,16 +336,17 @@ $retHTML .= qq{ -
Found $results files showing $from - $to (took $dur) -
HostBackup noTypedateage/dayssize/MBHostBackup noTypedateage/dayssize/MB
- - - - - - - - +
+ Found $results files showing $from - $to (took $dur) +
+
ShareNameType#SizeDateMedia
+ + + + + + + }; @@ -347,19 +367,15 @@ foreach $file (@{ $files }) { my $typeStr = BackupPC::Attrib::fileType2Text(undef, $file->{'type'}); - $retHTML .= ""; + $retHTML .= qq{}; - foreach my $v (( - $file->{'sharename'}, - qq{ } . hilite_html( $file->{'fpath'}, $hilite ), - $typeStr, - restore_link( $typeStr, $file->{'hname'}, $file->{'backupno'}, $file->{'sname'}, $file->{'fpath'}, $file->{'backupno'} ), - $file->{'size'}, - epoch_to_iso( $file->{'date'} ), - $file->{'dvd'} - )) { - $retHTML .= qq{}; - } + $retHTML .= + qq{} . + qq{} . + qq{} . + qq{} . + qq{} . + qq{}; $retHTML .= ""; } @@ -374,19 +390,33 @@ my $max_page = int( $results / $on_page ); my $page = 0; - my $link_fmt = '%s'; + sub page_link($$$) { + my ($param,$page,$display) = @_; + + $param->{'offset'} = $page; + + my $html = '' . $display . ''; + } $retHTML .= '
'; if ($offset > 0) { - $retHTML .= sprintf($link_fmt, $offset - 1, '<<') . ' '; + $retHTML .= page_link($param, $offset - 1, '<<') . ' '; } while ($page <= $max_page) { if ($page == $offset) { $retHTML .= $del . '' . ($page + 1) . ''; } else { - $retHTML .= $del . sprintf($link_fmt, $page, $page + 1); + $retHTML .= $del . page_link($param, $page, $page + 1); } if ($page < $offset - $pager_pages && $page != 0) { @@ -404,7 +434,7 @@ } if ($offset < $max_page) { - $retHTML .= ' ' . sprintf($link_fmt, $offset + 1, '>>'); + $retHTML .= ' ' . page_link($param, $offset + 1, '>>'); } $retHTML .= "
";
ShareType and Name#SizeDateMedia
$v} . $file->{'sharename'} . qq{$typeStr } . hilite_html( $file->{'fpath'}, $hilite ) . qq{} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupno'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'fpath'} )}, $file->{'backupno'} ) . qq{} . $file->{'size'} . qq{} . epoch_to_iso( $file->{'date'} ) . qq{} . $file->{'dvd'} . qq{