The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plack::Middleware::Devel::Agent::Plack - Plack Middleware Agent Debugger

SYNOPSIS

  PERL5OPT='-d:Agent' plackup --port 8777 -e 'enable "Plack::Middleware::Devel::Agent::Plack";package MyFirstApp;sub {[200,[qw(Content-Type text/plain)],["hello world\n"]]}'

DESCRIPTION

This debugger is handly for tracing all calls made within a psgi app, while excluding the guts of PSGI/Plack. Why? Well most of the time we want to know what is happening in our application, not in the PSGI layer as Plack/PSGI is pretty good at what it does.

Configuration and env variables

At its core this is a configuration class for the debugger provided by Deve::Agent. As a result it can be programatically configigured at runtime.

ENV Options

  • PSGI_TRACE_EVERY

    This is expected to be a number, when set a trace will be implemented every PSGI_TRACE_EVERY number of requests. If not set the default is 1.

Class variables

This section documents the class variables that can be used to programatically confiigure tracing. They are all accessable as static fully qualified variables via the class path Plack::Middleware::Devel::Agent::Plack

  • @EXCLUDE_DEFAULTS

    This contains the extended default exclusions for plack/psgi

  • %AGENT_OPTIONS

    This contains the options that will be passed to the constructor of the debuger.

    Some important notes:

      excludes=>{...}
        # the excludes are defined from an extended list of classes for PSIG/Plack
        # Defaults are defined in @EXCLUDE_DEFAULTS
    
      filter_on_args=>\&default_filter,
        # this filters out some additional classes defined in: %SELF_EXCLUDES
    
      on_frame_end=>\&flush_row,
        # this method outputs to STDERR by default
        # it is imported from Devel::Agent::Util
        
  • $TRACE_EVERY

    This represents how often a psgi trace will happen, default is 1.

  • $AGENT

    This is the debugger instance, it is redefined every time a new trace starts, so make use of it as needed.

    See: Devel::Agent for more details

  • $BEFORE_REQUEST=sub {}

    This is a callback that will be run before any requests objects are run, this can be handy if you want to do soemthing special before the debugger starts.

  • $BEFORE_TRACE=sub { my ($AGENT,$ID,$env)=@_ }

    This callback is run before the call to $AGENT->start_trace is called, but after $BEFORE_REQUEST->()

  • $AFTER_TRACE->($AGENT,$ID,$env,$res)

    This is called when the the request has completed and tracing of your application is done.

AUTHOR

Michael Shipper mailto:AKALINUX@CPAN.ORG