=pod

=head1 NAME

Devel::STrace::Monitor - Monitor interface component for Devel::STrace

=head1 SYNOPSIS

    #
    #    open the mmap'ed file
    #
    use Devel::STrace::Monitor;

    my $view = Devel::STrace::Monitor->open('somefile.map');

    my $cycles = 0;
    while (1) {
        print "\n**************************************\n";
    #
    #    refresh the internal ringbuffer map
    #
        $view->refresh();
    #
    #    dump the current traces
    #
        $view->trace(\&dump_trace);

        sleep 10;
    }
    #
    #    method to display the traces
    #
    sub dump_trace {
        my ($key, $slot, $depth, $line, $time, $entry) = @_;

        $lastkey = $key,
        print "\n**************************************\n"
            unless ($lastkey eq $key);

        if ($time) {
    #
    #    trim the weekday and year from timestamp
    #
            my $frac = ($time - int($time)) * 1000000;
            $frac=~s/\..*$//;
            my @parts = split(/\s+/, scalar localtime($time));
            pop @parts;    # get rid of year
            print "$key($depth) : $slot : $entry:$line at ",
                join(' ', @parts), '.', $frac, "\n";
        }
        else {
            print "$key($depth) : $slot : $entry:$line (No timestamp)\n";
        }
    }

=head1 DESCRIPTION

Provides methods to

=over 4

=item *

attach to and read the memory mapped file generated by L<Devel::STrace>
(or future full featured debuggers) using L<Devel::RingBuffer>.

=item *

set or clear any of the C<$DB::single>, C<$DB::trace>, or C<$DB::signal>
control variables of the AUT (via their tie'd interfaces in the AUT).

=item *

inspect the current execution call stack of the AUT

=back

The interfaces provide a simple framework for building
an external application that can attach to a running
Perl application, monitor its current execution, and eventually
detach, all while permitting the application continue to run
uninterrupted.

A more complete debugger module is planned to exploit
the various command/control structures available via L<Devel::RingBuffer>.
Note that this module will be fully compatible with the resulting
debugger so that, e.g., an application can first be monitored
to detect troublespots, and then the debugger can be attached
to fully debug the problem.

=head1 METHODS

Refer to the include classdocs for summary and detail method
descriptions.

=head1 SEE ALSO

L<Devel::STrace>

L<Devel::RingBuffer>

L<IPC::Mmap>

C<plstrace.pl> is a simple command line script using this module.

=head1 AUTHOR, COPYRIGHT, AND LICENSE

Dean Arnold L<mailto:darnold@presicient.com>

Copyright(C) 2006, Dean Arnold, Presicient Corp., USA.
All rights reserved.

Permission is granted to use this software under the same terms as Perl itself.
Refer to the L<Perl Artistic License|perlartistic> for details.

=cut
