--- lib/PXElator/httpd.pm 2009/09/14 21:11:23 433
+++ lib/PXElator/httpd.pm 2010/01/23 20:47:17 487
@@ -18,6 +18,7 @@
#use JSON;
use IO::Socket::INET;
use Regexp::Common qw/net/;
+use YAML;
our $title;
@@ -50,7 +51,6 @@
use log;
use x11;
use amt;
-use boolean;
use daemons;
use kvm;
@@ -63,12 +63,12 @@
use ping;
use wol;
-use CouchDB;
+use store;
sub menu {
- my $couch_url = $url;
- $couch_url =~ s{:\d+.+}{:5984/_utils/};
+ my $store_url = $url;
+ $store_url =~ s{:\d+.+}{:28017};
qq{
home
@@ -77,7 +77,8 @@
brctl
ip
|
-
couchdb
+
store
+
query
|
nmap
client
@@ -117,7 +118,7 @@
my $buff;
my $pos = 0;
- CouchDB::audit( 'static', { pid => $$, path => $path, type => $type, size => $size, block => $block, peerhost => $client->peerhost });
+ store::audit( 'static', { pid => $$, path => $path, type => $type, size => $size, block => $block, peerhost => $client->peerhost });
progress_bar::start;
@@ -145,12 +146,17 @@
qq|HTTP/1.1 302 Found\r\nContent-type: text/html\r\nLocation: $to\r\n\r\n|
}
+sub toggle {
+ my $v = shift;
+ return $v ? 0 : 1;
+}
+
sub get_request {
my ( $client, $path, $param ) = @_;
server->refresh;
- CouchDB::audit( 'request', { path => $path, param => $param, peerhost => $client->peerhost } );
+ store::audit( 'request', { path => $path, param => $param, peerhost => $client->peerhost } );
$title = $path;
@@ -241,7 +247,7 @@
eval '$server::' . $name . '= $param->{$name}';
}
my @table = (
- 'debug' => qq|
$debug |,
+ 'debug' => qq|
$debug |,
, 'new_clients' => qq|
|
);
@@ -264,6 +270,21 @@
|
;
+ } elsif ( $path =~ m{^/store/query} ) {
+ print $client ok
+ , qq|
|
+ ;
+ store::query( sub {
+ my $o = shift;
+ my $p = delete( $o->{package} );
+ delete( $o->{_id} );
+ # XXX sigh, dump dies if we don't do this
+ my $tmp = delete( $o->{param} );
+ $o->{param} = $tmp if defined $tmp;
+ print $client qq||, join(qq| |, map { $p->{$_} } keys %$p ), qq| |, dump( $o ), qq| \n|;
+ });
+ print $client qq|
|;
+
} elsif ( $path =~ m!^/client(?:/$RE{net}{IPv4}{-keep})?! ) {
my $ip = $1;
$title = $ip if $ip;
@@ -338,6 +359,8 @@
} else {
+ print $client ok qq|
Clients on $server::ip |;
+
my @ping;
if ( my $host = $param->{ping_target} ) {
@ping = ( $host );
@@ -348,33 +371,40 @@
my $ping = ping::fping( @ping ) if @ping;
my $arp = client::arp_mac_dev;
- print $client ok
- , qq|
Clients on $server::ip |
- , html::table( -5,
- 'ip', 'mac', 'dev', 'hostname', 'conf',
- map {
- my $ip = $_;
- my $conf = client::all_conf( $ip );
- my $mac = delete $conf->{mac} || '';
- my $style;
- $style
- = 'style="color:'
- . ( $ping->{$ip} ? 'green' : 'red' )
- . '"'
- if $ping;
- $style ||= '';
- my $ip_text = qq|
$ip |;
- $ip_text = qq|
$ip | if ip::in_dhcp_range($ip);
- (
- qq|
$ip_text |
- , format::mac( $mac => 'html' )
- , $arp->{$mac}
- , delete $conf->{hostname}
- , html::conf( $ip, $conf, 'inline' )
- )
- } client::all_ips
- )
+ my @clients;
+
+ foreach my $ip ( client::all_ips ) {
+
+ my $conf = client::all_conf( $ip );
+ my $mac = delete $conf->{mac} || '';
+ my $dev = $arp->{$mac};
+
+ next unless $dev || $param->{all};
+
+ my $style
+ = 'style="color:'
+ . ( $ping->{$ip} ? 'green' : 'red' )
+ . '"'
+ if $ping;
+
+ $style ||= '';
+ my $ip_text = qq|
$ip |;
+ $ip_text = qq|
$ip | if ip::in_dhcp_range($ip);
+
+ $dev = qq|
$dev | if $dev;
+
+ push @clients
+ , qq|
$ip_text |
+ , format::mac( $mac => 'html' )
+ , $dev
+ , delete $conf->{hostname}
+ , html::conf( $ip, $conf, 'inline' )
;
+ }
+
+ my $all = $param->{all} ? 0 : 1;
+
+ print $client html::table( -5, 'ip', 'mac', qq|
dev |, 'hostname', 'conf', @clients );
print $client qq|