121 |
} |
} |
122 |
|
|
123 |
my $sort_def = { |
my $sort_def = { |
124 |
default => 'date_a', |
search => { |
125 |
sql => { |
default => 'date_a', |
126 |
share_d => 'shares.name DESC', |
sql => { |
127 |
share_a => 'shares.name ASC', |
share_d => 'shares.name DESC', |
128 |
path_d => 'files.path DESC', |
share_a => 'shares.name ASC', |
129 |
path_a => 'files.path ASC', |
path_d => 'files.path DESC', |
130 |
num_d => 'files.backupnum DESC', |
path_a => 'files.path ASC', |
131 |
num_a => 'files.backupnum ASC', |
num_d => 'files.backupnum DESC', |
132 |
size_d => 'files.size DESC', |
num_a => 'files.backupnum ASC', |
133 |
size_a => 'files.size ASC', |
size_d => 'files.size DESC', |
134 |
date_d => 'files.date DESC', |
size_a => 'files.size ASC', |
135 |
date_a => 'files.date ASC', |
date_d => 'files.date DESC', |
136 |
}, |
date_a => 'files.date ASC', |
137 |
est => { |
}, |
138 |
share_d => 'sname STRD', |
est => { |
139 |
share_a => 'sname STRA', |
share_d => 'sname STRD', |
140 |
path_d => 'filepath STRD', |
share_a => 'sname STRA', |
141 |
path_a => 'filepath STRA', |
path_d => 'filepath STRD', |
142 |
num_d => 'backupnum NUMD', |
path_a => 'filepath STRA', |
143 |
num_a => 'backupnum NUMA', |
num_d => 'backupnum NUMD', |
144 |
size_d => 'size NUMD', |
num_a => 'backupnum NUMA', |
145 |
size_a => 'size NUMA', |
size_d => 'size NUMD', |
146 |
date_d => 'date NUMD', |
size_a => 'size NUMA', |
147 |
date_a => 'date NUMA', |
date_d => 'date NUMD', |
148 |
|
date_a => 'date NUMA', |
149 |
|
} |
150 |
|
}, burn => { |
151 |
|
default => 'date_a', |
152 |
|
sql => { |
153 |
|
share_d => 'share DESC', |
154 |
|
share_a => 'share ASC', |
155 |
|
num_d => 'backupnum DESC', |
156 |
|
num_a => 'backupnum ASC', |
157 |
|
date_d => 'date DESC', |
158 |
|
date_a => 'date ASC', |
159 |
|
age_d => 'age DESC', |
160 |
|
age_a => 'age ASC', |
161 |
|
size_d => 'size DESC', |
162 |
|
size_a => 'size ASC', |
163 |
|
incsize_d => 'inc_size DESC', |
164 |
|
incsize_a => 'inc_size ASC', |
165 |
|
} |
166 |
} |
} |
167 |
}; |
}; |
168 |
|
|
169 |
sub getSort($$) { |
sub getSort($$$) { |
170 |
my ($type, $sort_order) = @_; |
my ($part,$type, $sort_order) = @_; |
171 |
|
|
172 |
$sort_order ||= $sort_def->{'default'}; |
die "unknown part: $part" unless ($sort_def->{$part}); |
173 |
|
die "unknown type: $type" unless ($sort_def->{$part}->{$type}); |
174 |
|
|
175 |
die "unknown type: $type" unless ($sort_def->{$type}); |
$sort_order ||= $sort_def->{$part}->{'default'}; |
176 |
|
|
177 |
if (my $ret = $sort_def->{$type}->{$sort_order}) { |
if (my $ret = $sort_def->{$part}->{$type}->{$sort_order}) { |
178 |
return $ret; |
return $ret; |
179 |
} else { |
} else { |
180 |
# fallback to default sort order |
# fallback to default sort order |
181 |
return $sort_def->{$type}->{ $sort_def->{'default'} }; |
return $sort_def->{$part}->{$type}->{ $sort_def->{$part}->{'default'} }; |
182 |
} |
} |
183 |
} |
} |
184 |
|
|
212 |
my $where = getWhere($param); |
my $where = getWhere($param); |
213 |
$sql_where = " WHERE ". $where if ($where); |
$sql_where = " WHERE ". $where if ($where); |
214 |
|
|
215 |
my $order = getSort('sql', $param->{'sort'}); |
my $order = getSort('search', 'sql', $param->{'sort'}); |
216 |
|
|
217 |
my $sql_order = qq{ |
my $sql_order = qq{ |
218 |
ORDER BY $order |
ORDER BY $order |
314 |
|
|
315 |
# $cond->set_max( $offset + $on_page ); |
# $cond->set_max( $offset + $on_page ); |
316 |
$cond->set_options( $HyperEstraier::Condition::SURE ); |
$cond->set_options( $HyperEstraier::Condition::SURE ); |
317 |
$cond->set_order( getSort('est', $param->{'sort'} ) ); |
$cond->set_order( getSort('search', 'est', $param->{'sort'} ) ); |
318 |
|
|
319 |
# get the result of search |
# get the result of search |
320 |
my @res; |
my @res; |
418 |
); |
); |
419 |
} |
} |
420 |
|
|
421 |
sub getBackupsNotBurned() { |
sub getBackupsNotBurned($) { |
422 |
|
|
423 |
|
my $param = shift; |
424 |
my $dbh = get_dbh(); |
my $dbh = get_dbh(); |
425 |
|
|
426 |
my $sql = q{ |
my $order = getSort('burn', 'sql', $param->{'sort'}); |
427 |
|
|
428 |
|
print STDERR "## sort=". ($param->{'sort'} || 'no sort param') . " burn sql order: $order\n"; |
429 |
|
|
430 |
|
my $sql = qq{ |
431 |
SELECT |
SELECT |
432 |
backups.hostID AS hostID, |
backups.hostID AS hostID, |
433 |
hosts.name AS host, |
hosts.name AS host, |
435 |
backups.num AS backupnum, |
backups.num AS backupnum, |
436 |
backups.type AS type, |
backups.type AS type, |
437 |
backups.date AS date, |
backups.date AS date, |
438 |
|
date_part('epoch',now()) - backups.date as age, |
439 |
backups.size AS size, |
backups.size AS size, |
440 |
backups.id AS id, |
backups.id AS id, |
441 |
backups.inc_size AS inc_size, |
backups.inc_size AS inc_size, |
457 |
backups.size, |
backups.size, |
458 |
backups.inc_size, |
backups.inc_size, |
459 |
backups.parts |
backups.parts |
460 |
ORDER BY backups.date |
ORDER BY $order |
461 |
}; |
}; |
462 |
my $sth = $dbh->prepare( $sql ); |
my $sth = $dbh->prepare( $sql ); |
463 |
my @ret; |
my @ret; |
464 |
$sth->execute(); |
$sth->execute(); |
465 |
|
|
466 |
while ( my $row = $sth->fetchrow_hashref() ) { |
while ( my $row = $sth->fetchrow_hashref() ) { |
467 |
$row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) ); |
$row->{'age'} = sprintf("%0.1f", ( $row->{'age'} / 86400 ) ); |
468 |
|
#$row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) ); |
469 |
$row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024); |
$row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024); |
470 |
|
|
471 |
# do some cluster calculation (approximate) and convert to kB |
# do some cluster calculation (approximate) and convert to kB |
476 |
return @ret; |
return @ret; |
477 |
} |
} |
478 |
|
|
479 |
sub displayBackupsGrid() { |
sub displayBackupsGrid($) { |
480 |
|
|
481 |
|
my $param = shift; |
482 |
|
|
483 |
my $retHTML .= q{ |
my $retHTML .= q{ |
484 |
<form id="forma" method="POST" action="}.$MyURL.q{?action=burn"> |
<form id="forma" method="POST" action="}.$MyURL.q{?action=burn"> |
813 |
<td class="tableheader"> |
<td class="tableheader"> |
814 |
<input type="checkbox" name="allFiles" id="allFiles" onClick="checkAll('allFiles');"> |
<input type="checkbox" name="allFiles" id="allFiles" onClick="checkAll('allFiles');"> |
815 |
</td> |
</td> |
816 |
<td align="center">Share</td> |
} . |
817 |
<td align="center">Backup no</td> |
sort_header($param, 'Share', 'share', 'center') . |
818 |
|
sort_header($param, '#', 'num', 'center') . |
819 |
|
qq{ |
820 |
<td align="center">Type</td> |
<td align="center">Type</td> |
821 |
<td align="center">date</td> |
} . |
822 |
<td align="center">age/days</td> |
sort_header($param, 'Date', 'date', 'center') . |
823 |
<td align="center">size/MB</td> |
sort_header($param, 'Age/days', 'age', 'center') . |
824 |
<td align="center">gzip size/kB</td> |
sort_header($param, 'Size/Mb', 'size', 'center') . |
825 |
|
sort_header($param, 'gzip size/Kb', 'incsize', 'center') . |
826 |
|
qq{ |
827 |
</tr> |
</tr> |
|
|
|
828 |
}; |
}; |
829 |
|
|
830 |
my @color = (' bgcolor="#e0e0e0"', ''); |
my @color = (' bgcolor="#e0e0e0"', ''); |
832 |
my $i = 0; |
my $i = 0; |
833 |
my $host = ''; |
my $host = ''; |
834 |
|
|
835 |
foreach my $backup ( getBackupsNotBurned() ) { |
foreach my $backup ( getBackupsNotBurned($param) ) { |
836 |
|
|
837 |
if ($host ne $backup->{'host'}) { |
if ($host ne $backup->{'host'}) { |
838 |
$i++; |
$i++; |
915 |
<td></td> |
<td></td> |
916 |
}; |
}; |
917 |
|
|
918 |
my ($sort_what, $sort_dir) = split(/_/,$param->{'sort'},2); |
sub sort_header($$$$) { |
919 |
|
my ($param, $display, $name, $align) = @_; |
920 |
|
|
921 |
sub sort_header($$$) { |
my ($sort_what, $sort_dir) = split(/_/,$param->{'sort'},2); |
|
my ($param, $display, $name) = @_; |
|
922 |
|
|
923 |
my $html = '<td align="center"'; |
my $old_sort = $param->{'sort'}; |
924 |
|
|
925 |
|
my $html = qq{<td align="$align"}; |
926 |
if (lc($sort_what) eq lc($name)) { |
if (lc($sort_what) eq lc($name)) { |
927 |
my $dir = lc($sort_dir); |
my $dir = lc($sort_dir); |
928 |
$dir =~ tr/ad/da/; |
$dir =~ tr/ad/da/; |
932 |
$param->{'sort'} = $name . '_a'; |
$param->{'sort'} = $name . '_a'; |
933 |
} |
} |
934 |
$html .= '<a href="' . page_uri($param) . '">' . $display . '</a></td>'; |
$html .= '<a href="' . page_uri($param) . '">' . $display . '</a></td>'; |
935 |
|
$param->{'sort'} = $old_sort; |
936 |
|
|
937 |
return $html; |
return $html; |
938 |
} |
} |
939 |
|
|
940 |
$retHTML .= |
$retHTML .= |
941 |
sort_header($param, 'Share', 'share') . |
sort_header($param, 'Share', 'share', 'center') . |
942 |
sort_header($param, 'Type and Name', 'path') . |
sort_header($param, 'Type and Name', 'path', 'center') . |
943 |
sort_header($param, '#', 'num') . |
sort_header($param, '#', 'num', 'center') . |
944 |
sort_header($param, 'Size', 'size') . |
sort_header($param, 'Size', 'size', 'center') . |
945 |
sort_header($param, 'Date', 'date'); |
sort_header($param, 'Date', 'date', 'center'); |
946 |
|
|
947 |
$retHTML .= qq{ |
$retHTML .= qq{ |
948 |
<td align="center">Media</td> |
<td align="center">Media</td> |