Brock Wilcox > CGI-Inspect-0.5 > CGI::Inspect

Download:
CGI-Inspect-0.5.tar.gz

Dependencies

Annotate this POD

CPAN RT

Open  1
View/Report Bugs
Module Version: 0.5   Source  

NAME ^

CGI::Inspect - Inspect and debug CGI apps with an in-browser UI

SYNOPSIS ^

  use CGI::Inspect; # This exports inspect()

  print "Content-type: text/html\n\n";

  my $food = "toast";

  for my $i (1..10) {
    print "$i cookies for me to eat...<br>";
    inspect() if $i == 5; # be sure to edit $toast :)
  }

  print "I also like $food!";

DESCRIPTION ^

This class is a drop-in web based inspector for plain CGI (or CGI-based) applications. Include the library, and then call inspect(). In your server error logs you'll see something like "Please connect to localhost:8080". When you do, you'll be greeted with an inspection UI which includes a stack trace, REPL, and other goodies.

To work it's magic this modules uses Continuity, Devel::LexAlias, Devel::StackTrace::WithLexicals, and their prerequisites (such as PadWalker). Remember that you can always install such things locally for debugging -- no need to install them systemwide (in case you are afraid of the power that they provide).

EXPORTED SUBS ^

inspect()

This starts the Continuity server and inspector on the configured port (defaulting to 8080). You can pass it parameters which it will then pass on to CGI::Inspect->new. The most useful one is probably port:

  inspect( port => 12345 );

Another useful parameter is plugins. The default is:

    plugins => [qw( BasicLook Exit REPL CallStack )]

PLUGINS ^

CGI::Inspect comes with a few plugins by default:

Creating Plugins

Plugins are easy to create! They are really just subroutines that return a string for what they want printed. All of the built-in plugins actuall inherti from CGI::Inspect::Plugin, which just provides some convenience methods. The main CGI::Inspect module will create an instance of your plugin with Plugin->new, and then will execute it with $plugin->process.

Plugins can, however, make use of Continuity, including utilizing callbacks. Here is the complete source to the 'Exit' plugin, as a fairly simple example.

  package CGI::Inspect::Plugin::Exit;

  use strict;
  use base 'CGI::Inspect::Plugin';

  sub process {
    my ($self) = @_;
    my $exit_link = $self->request->callback_link(
      Exit => sub {
        $self->manager->{do_exit} = 1;
      }
    );
    my $output = qq{
      <div class=dialog title="Exit">
        $exit_link
      </div>
    };
    return $output;
  }

  1;

For now, read the source of the default plugins for further ideas. And of course email the author if you have any questions or ideas!

METHODS ^

These methods are all internal. All you have to do is call inspect().

CGI::Inspect->new()

Create a new monitor object.

$self->start_inspecting

Load plugins and start inspecting!

$self->start_server

Initialize the Continuity server, and begin the run loop.

$self->display

Display the current page, based on $self->{content}

$self->request

Returns the current request obj

$self->load_plugins

Load all of our plugins.

$self->main

This is executed as the entrypoint for inspector sessions.

SEE ALSO ^

Carp::REPL

AUTHOR ^

  Brock Wilcox <awwaiid@thelackthereof.org> - http://thelackthereof.org/

COPYRIGHT ^

  Copyright (c) 2008-2009 Brock Wilcox <awwaiid@thelackthereof.org>. All rights
  reserved.  This program is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
syntax highlighting: