X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FSearch.pm;h=2fd2f9839c7a9649cd08b0c96c068fbebaf2be76;hp=f2dac44032b8a661042a284e18dbeedc25c63b8e;hb=1e64554b4812c6fccce5aa853aee8a7a6a85987f;hpb=1f12f5ba25530a04f3a5e7b86c3ac88d9526fe1d diff --git a/lib/BackupPC/Search.pm b/lib/BackupPC/Search.pm index f2dac44..2fd2f98 100644 --- a/lib/BackupPC/Search.pm +++ b/lib/BackupPC/Search.pm @@ -229,8 +229,8 @@ sub getFiles($) { # do we have to add tables for burned media? if ( $param->{burned} ) { $sql_from .= qq{ - LEFT OUTER JOIN archive_backup on archive_backup.backup_id = backups.id - LEFT OUTER JOIN archive_burned on archive_burned.archive_id = archive_backup.archive_id + LEFT OUTER JOIN archive_backup_parts on backup_id = backups.id + LEFT OUTER JOIN archive_burned on archive_burned.archive_id = archive_id }; } @@ -374,35 +374,6 @@ sub getGzipSize($$) ); } -sub getVolumes($) { - my $id = shift; - - my $max_archive_size = $Conf{ArchiveMediaSize} || die "no ArchiveMediaSize"; - - my $sth = $dbh->prepare(qq{ - select - size - from backup_parts - where backup_id = ? - order by part_nr asc - }); - - $sth->execute($id); - - my $cumulative_size = 0; - my $volumes = 1; - - while(my ($size) = $sth->fetchrow_array) { - if ($cumulative_size + $size > $max_archive_size) { - $volumes++; - $cumulative_size = $size; - } else { - $cumulative_size += $size; - } - } - - return ($volumes,$cumulative_size); -} sub getBackupsNotBurned($) { @@ -414,36 +385,27 @@ sub getBackupsNotBurned($) { 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, - shares.name AS share, - 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, - backups.parts AS parts - FROM backups - INNER JOIN shares ON backups.shareID=shares.ID - INNER JOIN hosts ON backups.hostID = hosts.ID - LEFT OUTER JOIN archive_backup ON archive_backup.backup_id = backups.id - WHERE backups.inc_size > 0 AND backups.size > 0 AND backups.inc_deleted is false AND archive_backup.backup_id IS NULL AND backups.parts > 0 - GROUP BY - backups.hostID, - hosts.name, - shares.name, - backups.num, - backups.shareid, - backups.id, - backups.type, - backups.date, - backups.size, - backups.inc_size, - backups.parts - ORDER BY $order + SELECT + p.id, + p.filename, + b.date, + date_part('epoch',now()) - b.date as age, + p.size, + count(ap.*) as scheduled, + count(ab.*) as burned + FROM backup_parts p + JOIN backups b ON b.id = p.backup_id + LEFT OUTER JOIN archive_parts ap ON ap.backup_part_id = p.id + LEFT OUTER JOIN archive_burned ab ON ab.archive_id = ap.archive_id + GROUP BY p.id,filename,b.date,age,p.size,p.part_nr + }; + + $sql .= qq{ + HAVING count(ap.*) = 0 + } unless $param->{scheduled}; + + $sql .= qq{ + ORDER BY b.date,p.part_nr }; my $sth = $dbh->prepare( $sql ); my @ret; @@ -452,15 +414,6 @@ print STDERR "## sort=". ($param->{'sort'} || 'no sort param') . " burn sql orde while ( my $row = $sth->fetchrow_hashref() ) { $row->{'age'} = sprintf("%0.1f", ( $row->{'age'} / 86400 ) ); #$row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) ); - - my $max_archive_size = $Conf{ArchiveMediaSize} || die "no ArchiveMediaSize"; - if ($row->{size} > $max_archive_size) { - ($row->{volumes}, $row->{inc_size_calc}) = getVolumes($row->{id}); - } - - # do some cluster calculation (approximate) - $row->{inc_size} = int(( ($row->{inc_size} + 1023 ) / 2 ) * 2); - $row->{inc_size_calc} ||= $row->{inc_size}; push @ret, $row; } @@ -472,496 +425,149 @@ sub displayBackupsGrid($) { my $param = shift; my $max_archive_size = $Conf{ArchiveMediaSize} || die "no ArchiveMediaSize"; - my $max_archive_file_size = $Conf{ArchiveChunkSize} || die "no MaxFileInSize"; - - my $retHTML .= q{ -
- }; - $retHTML .= <<'EOF3'; - - -
- - -Size: kB - -
-
 
-
 
-
0%
-
-
- -
 
- -Note: - - - - -
- -EOF3 - $retHTML .= q{ - - - - - - } . - sort_header($param, 'Share', 'share', 'center') . - sort_header($param, '#', 'num', 'center') . - qq{ - - } . - sort_header($param, 'Date', 'date', 'center') . - sort_header($param, 'Age/days', 'age', 'center') . - sort_header($param, 'Size', 'size', 'center') . - sort_header($param, 'gzip size', 'incsize', 'center') . - qq{ - - }; - - my @color = (' bgcolor="#e0e0e0"', ''); - - my $i = 0; - my $host = ''; - - foreach my $backup ( getBackupsNotBurned($param) ) { - - if ($host ne $backup->{'host'}) { - $i++; - $host = $backup->{'host'}; - } - my $ftype = ""; - - my $checkbox_key = $backup->{'hostid'}. '_' .$backup->{'backupnum'} . '_' . $backup->{'id'}; - - $retHTML .= - ' - ' . - '' . - '' . - '' . - '' . - '' . - '' . - '' . - '' . - '' . - '' . - - "\n"; - } - - $retHTML .= "
- - Typemedias
'; - - if (($backup->{'inc_size'} || 0) > 0) { - $retHTML .= ' - '; - } - - my $img_url = $Conf{CgiImageDirURL}; - - $retHTML .= - '' . $backup->{'host'} . ':' . $backup->{'share'} . '' . $backup->{'backupnum'} . '' . $backup->{'type'} . '' . epoch_to_iso( $backup->{'date'} ) . '' . $backup->{'age'} . '' . unit($backup->{'size'}) . '' . unit($backup->{'inc_size'}) . '' . ( qq{media} x $backup->{volumes} ) . '
"; - $retHTML .= "
"; - - return $retHTML; -} - -sub displayGrid($) { - my ($param) = @_; - - my $offset = $param->{'offset'}; - my $hilite = $param->{'search_filename'}; - - my $retHTML = ""; - - my $start_t = time(); - - my ($results, $files); - if ($param->{'use_hest'} && length($hilite) > 0) { - ($results, $files) = getFilesHyperEstraier($param); - } else { - ($results, $files) = getFiles($param); - } - - my $dur_t = time() - $start_t; - my $dur = sprintf("%0.4fs", $dur_t); - - my ($from, $to) = (($offset * $on_page) + 1, ($offset * $on_page) + $on_page); - - if ($results <= 0) { - $retHTML .= qq{ -

No results found...

- }; - return $retHTML; - } else { - # DEBUG - #use Data::Dumper; - #$retHTML .= '
' . Dumper($files) . '
'; - } - - - $retHTML .= qq{ -
- Found $results files showing $from - $to (took $dur) -
- - - - }; - - sub sort_header($$$$) { - my ($param, $display, $name, $align) = @_; - - my ($sort_what, $sort_direction) = split(/_/,$param->{'sort'},2); - - my $old_sort = $param->{'sort'}; - - my $html = qq{'; - $param->{'sort'} = $old_sort; - - return $html; + + $html .= '>' . $display . '' . $arrow . ''; + $param->{'sort'} = $old_sort; + + return $html; } $retHTML .= @@ -1003,16 +609,16 @@ sub displayGrid($) { $sth_archived ||= $dbh->prepare(qq{ select - dvd_nr, note, + archive.dvd_nr, note, count(archive_burned.copy) as copies from archive inner join archive_burned on archive_burned.archive_id = archive.id - inner join archive_backup on archive.id = archive_backup.archive_id - inner join backups on backups.id = archive_backup.backup_id + inner join archive_backup_parts on archive.id = archive_backup_parts.archive_id + inner join backups on backups.id = archive_backup_parts.backup_id inner join hosts on hosts.id = backups.hostid inner join shares on shares.id = backups.shareid where hosts.name = ? and shares.name = ? and backups.num = ? - group by dvd_nr, note + group by archive.dvd_nr, note }); my @mediums; @@ -1031,113 +637,442 @@ sub displayGrid($) { return $html; } - my $i = $offset * $on_page; + my $i = $offset * $on_page; + + foreach $file (@{ $files }) { + $i++; + + my $typeStr = BackupPC::Attrib::fileType2Text(undef, $file->{'type'}); + $retHTML .= qq{}; + + $retHTML .= qq{}; + + $retHTML .= + qq{} . + qq{} . + qq{} . + qq{} . + qq{} . + qq{}; + + $retHTML .= ""; + } + $retHTML .= "
{'sort'} = $name . '_' . $direction; - $html .= ' style="border: 1px solid #808080;"'; - - # add unicode arrow for direction - $arrow .= ' '; - $arrow .= $direction eq 'a' ? '▲' - : $direction eq 'd' ? '▼' - : '' - ; - - } else { - $param->{'sort'} = $name . '_a'; - } - - $html .= '>' . $display . '' . $arrow . '
$i} . $file->{'hname'} . ':' . $file->{'sname'} . qq{$typeStr } . hilite_html( $file->{'filepath'}, $hilite ) . qq{} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupnum'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'filepath'} )}, $file->{'backupnum'} ) . qq{} . $file->{'size'} . qq{} . epoch_to_iso( $file->{'date'} ) . qq{} . check_archived( $file->{'hname'}, $file->{'sname'}, $file->{'backupnum'} ) . qq{
"; + + # all variables which has to be transfered + foreach my $n (qw/search_day_from search_month_from search_year_from search_day_to search_month_to search_year_to search_backup_day_from search_backup_month_from search_backup_year_from search_backup_day_to search_backup_month_to search_backup_year_to search_filename offset/) { + $retHTML .= qq{\n}; + } + + my $del = ''; + my $max_page = int( $results / $on_page ); + my $page = 0; + + sub page_uri($) { + my $param = shift || die "no param?"; + + my $uri = $MyURL; + my $del = '?'; + foreach my $k (keys %{ $param }) { + if ($param->{$k}) { + $uri .= $del . $k . '=' . ${EscURI( $param->{$k} )}; + $del = '&'; + } + } + return $uri; + } + + sub page_link($$$) { + my ($param,$page,$display) = @_; + + $param->{'offset'} = $page if (defined($page)); + + my $html = '' . $display . ''; + } + + $retHTML .= '
'; + + if ($offset > 0) { + $retHTML .= page_link($param, $offset - 1, '<<') . ' '; + } + + while ($page <= $max_page) { + if ($page == $offset) { + $retHTML .= $del . '' . ($page + 1) . ''; + } else { + $retHTML .= $del . page_link($param, $page, $page + 1); + } + + if ($page < $offset - $pager_pages && $page != 0) { + $retHTML .= " ... "; + $page = $offset - $pager_pages; + $del = ''; + } elsif ($page > $offset + $pager_pages && $page != $max_page) { + $retHTML .= " ... "; + $page = $max_page; + $del = ''; + } else { + $del = ' | '; + $page++; + } + } + + if ($offset < $max_page) { + $retHTML .= ' ' . page_link($param, $offset + 1, '>>'); + } + + $retHTML .= "
"; + + return $retHTML; +} + +my @units = qw/b k M G/; +sub unit { + my $v = shift; + + my $o = 0; + + while ( ( $v / 10000 ) >= 1 ) { + $o++; + $v /= 1024; + } + + if ( $v >= 1 ) { + return sprintf("%d%s", $v, $units[$o]); + } elsif ( $v == 0 ) { + return 0; + } else { + return sprintf("%.1f%s", $v, $units[$o]); + } +} + +1; + +__DATA__ + + + + +
+ + +Size: kB + +
+
 
+
 
+
0%
+
+
+ +
 
+ +Note: + + + + +
+ +