package Apache::Status;
use strict;
use mod_perl ();
$Apache::Status::VERSION = '2.03';
my %is_installed = ();
my $Is_Win32 = ($^O eq "MSWin32");
{
local $SIG{__DIE__};
%is_installed = map {
$_, (eval("require $_") || 0);
} qw (Data::Dumper Devel::Symdump B Apache::Request Apache::Peek Apache::Symbol);
}
use vars qw($newQ);
if ($is_installed{"Apache::Request"}) {
$newQ ||= sub { Apache::Request->new(@_) };
}
else {
$is_installed{"CGI"} = eval("require CGI") || 0;
$newQ ||= sub { CGI->new; };
}
my $CPAN_base = "http://www.perl.com/CPAN/modules/by-module";
my(%status) = (
script => "PerlRequire'd Files",
inc => "Loaded Modules",
rgysubs => "Compiled Registry Scripts",
'symdump' => "Symbol Table Dump",
inh_tree => "Inheritance Tree",
isa_tree => "ISA Tree",
env => "Environment",
sig => "Signal Handlers",
myconfig => "Perl Configuration",
hooks => "Enabled mod_perl Hooks",
);
delete $status{'hooks'} if $mod_perl::VERSION >= 1.9901;
delete $status{'sig'} if $Is_Win32;
if($Apache::Server::SaveConfig) {
$status{"section_config"} = "Perl Section Configuration";
}
sub menu_item {
my($self, $key, $val, $sub) = @_;
$status{$key} = $val;
no strict;
*{"status_${key}"} = $sub
if $sub and ref $sub eq 'CODE';
}
sub handler {
my($r) = @_;
Apache->request($r); #for Apache::CGI
my $qs = $r->args || "";
my $sub = "status_$qs";
no strict 'refs';
if($qs =~ s/^(noh_\w+).*/$1/) {
return &{$qs}($r, $newQ->($r));
}
header($r);
if(defined &$sub) {
$r->print(@{ &{$sub}($r, $newQ->($r)) });
}
elsif ($qs and %{$qs."::"}) {
$r->print(symdump($r, $newQ->($r), $qs));
}
else {
my $uri = $r->uri;
$r->print(
map { qq[$status{$_}
\n] } keys %status
);
}
$r->print("