--- lib/PXElator/html.pm 2009/08/09 18:56:04 180 +++ lib/PXElator/html.pm 2011/02/12 14:54:42 560 @@ -1,6 +1,7 @@ package html; use Data::Dump qw/dump/; +use amt; sub table { my $cols = shift; @@ -14,9 +15,14 @@ my @td = map { "$_" } @_; my $html = qq{\n$th}; + my $row = 0; + foreach ( 0 .. $#td ) { $html .= $td[$_]; - $html .= qq{\n} if ( $_ + 1 ) % $cols == 0; + if ( ( $_ + 1 ) % $cols == 0 ) { + $zebra = $row++ % 2 == 0 ? qq{ style="background: #eee"} : ''; + $html .= qq{\n}; + }; } $html .= qq{\n
}; } @@ -34,28 +40,86 @@ sub tt { - qq|| . join(' ', @_) . qq||; + qq|| . join(' ', @_) . qq|| if @_; } sub select { my $name = shift; my $selected_option = shift; + unshift @_, '' unless $selected_option; return join("\n" , qq|| - , qq|| ); } +sub pre { + qq|
| . join(' ', @_) . qq|
| if @_; +} + sub pre_dump { my $data = shift; my $dump = dump( $data ); - $dump =~ s{"([^"]+)"(\s*=>)}{$1$2}gs; - $dump =~ s{"([^"]+)"}{"$1"}gs; + $dump =~ s{"([^"]+)"(\s*=>)}{$1 $2}gs; + $dump =~ s{"([^"]*)"}{"$1"}gs; qq|
$dump
|; } +sub conf { + my ($ip,$conf,$format) = @_; + my @editable = splice(@_,3); + +# warn "# conf ",dump( $ip, $conf, $format, [ @editable ] ); + + $format ||= 'inline'; + + my @opts = map { + my $name = $_; + my $html = $conf->{$name}; + + if ( $format eq 'edit' && grep { m/^$name$/ } @editable ) { + $size = length($html); + ( $name, qq|| ) + } else { + if ( $name eq 'amt' ) { + my $amt_ip = amt::ip($ip,$html); + # $html contains password! + $html = qq|$amt_ip|; + + if ( $format ne 'inline' ) { + my $power = amt::power_on($ip); + $html .= qq| power: | + . ( $power + ? qq|on| + : qq|off| + ); + client::conf( $ip, 'power' => $power ? 'on' : 'off' ); + } + } elsif ( $name eq 'ssh' ) { + $html =~ s{\s(\S{16}).+(\S{16})\s}{ $1..$2 }; + chomp($html); + } elsif ( $name eq 'kvm' ) { + $html = qq|$html|; + } elsif ( $name eq 'munin' ) { + $html = join("\n", map { my $url = $_; $url =~ s/-d\w+\.\w+$/.html/; qq|
| } split(/\s+/s,$html)); + } elsif ( $name eq 'ports' ) { + $html =~ s{\b(\S+)\t(\S+)\t(\S+)\b}{$3 }gs; + } else { + $html = qq|$html|; + }; + + if ( $format =~ /edit|table/ ) { + ( $name, $html ); + } else { + qq|
$name $html
| + } + } + } grep { length($conf->{$_}) > 0 } sort keys %$conf; + + $format eq 'inline' ? join("\n", @opts) : @opts; +} + warn "loaded"; 1;