+ } elsif ( $path =~ m{^/store/latest} ) {
+ print $client ok
+ , qq|
+<style type=text/css>
+ .z {
+ background: #eee;
+ }
+ td > pre {
+ margin: 0;
+ max-height: 3em;
+ overflow: hidden;
+ }
+ td:hover > pre {
+ max-height: 100%;
+ overflow: show;
+ }
+</style>
+ |
+ , qq|<table>|
+ ;
+ my ( $s1,$s2 ) = ( ' class=z', '' );
+ my @cols;
+
+ my $from_t = $param->{from_t};
+
+ my $q;
+ $q->{'package.time'} = { '$lt' => $from_t * 1 } if $from_t;
+# $q->{'package.name'} = { '$ne' => 'syslogd' };
+ $q->{'package.name'} = { '$ne' => 'dhcpd' };
+# $q->{'package.name'} = { '$ne' => [ 'dhcpd', 'dnsd' ] };
+ $q->{'tag'} = { '$ne' => 'CRON' };
+ store::query( $q, sub {
+ my $o = shift;
+ my $p = delete( $o->{package} );
+ delete( $o->{_id} );
+
+ if ( ! @cols ) {
+ #@cols = keys %$p;
+ @cols = qw( time name );
+ print $client qq|<tr><th>|
+ , join(qq|</th><th>|, @cols)
+ , qq|</th><th></th></tr>|
+ ;
+ }
+
+ # XXX sigh, dump dies if we don't do this
+# delete $o->{$_} foreach ( grep { ! defined $o->{$_} } keys %$o );
+
+ print $client qq|<tr$s1>|
+ , strftime( qq|<td title="%Y-%m-%d">%H:%M:%S</td>|, localtime($p->{time}) )
+ , map { qq|<td>$_<td>| } ( $p->{name} , html::pre_dump($o) )
+ , qq|</tr>\n|
+ ;
+ ( $s1, $s2 ) = ( $s2, $s1 );
+ $from_t = $p->{time};
+ });
+ print $client qq|</table>|,
+ qq|<a href="/store/latest?from_t=$from_t">more</a>|
+ ;
+