hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 3
-use Moose;
-use Method::Signatures;
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 4
-use Data::Visitor::Callback;
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 5
-# has trace => ( is => 'rw' );
+sub new {
+ my $package = shift;
+ # bless $package, { };
+ return $package; # ... not an instance; use the goo in $monitor, including it's coroutine context.
+}
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 11
-with qw(
- MooseX::Coro
- MooseX::Continuity::Request
- MooseX::Continuity::CallbackLinks
-);
+sub process {
+ my $self= shift; # ... and we don't use this self, instead delegating back to $monitor.
+ my $monitor = shift;
+ print_trace($monitor);
+}
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 17
-method print_trace {
- $self->print("
");
- # my @frames = $self->trace->frames;
+sub print_trace {
+ my $monitor = shift;
+ $monitor->print("");
+ # my @frames = $monitor->trace->frames;
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 27
- $self->print("" . $level->subroutine
+ $monitor->print(" " . $level->subroutine
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 30
- $self->print_lexicals($level->lexicals);
- $self->print(" ");
+ print_lexicals($monitor, $level->lexicals);
+ $monitor->print("");
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 33
- $self->print(" ");
+ $monitor->print(" ");
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 36
-method print_lexicals {
+sub print_lexicals {
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 38
- my $lexicals = Devel::StackTrace::WithLexicals->new(
- ignore_package => [qw( Devel::StackTrace Continuity::Monitor::CGI )]
- );
+ my $monitor = shift;
+ my $lexicals = shift;
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 48
- my $fieldname = $self->field_name($fieldnum++);
- $self->print(qq| ");
+ $monitor->print("");
+ $monitor->print("");
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 87
-method main {
- while(1) {
- $self->print_trace;
- $self->yield(1);
- $self->process_callbacks;
- }
-}
-
hunk ./lib/Continuity/Monitor.pm 11
-use PadWalker 'peek_my';
-use Moose;
-
-use Method::Signatures;
hunk ./lib/Continuity/Monitor.pm 15
-use Devel::StackTrace::WithLexicals;
-
hunk ./lib/Continuity/Monitor.pm 21
-
hunk ./lib/Continuity/Monitor.pm 65
+
hunk ./lib/Continuity/Monitor.pm 67
- my $self = {
- port => 8081, # override default port to avoid a conflict
- %ops,
- };
-
+
hunk ./lib/Continuity/Monitor.pm 73
- $self->{continuity} = Continuity->new(
- port => $self->{port},
- cookie_session => 'monitor_sid',
- callback => sub { $self->main(@_) },
- docroot => $docroot,
+ # sdw -- what weird things?
+
+ my $self = bless {
+ callback => { },
+ request => undef,
+ server => delete $ops{server},
+ # %ops, # do we want any of these options ever? guess they all go straight to Continuity.
+ }, $class;
+
+ $self->{monitor_server} = Continuity->new(
+ cookie_session => 'monitor_sid',
+ callback => sub { $self->main(@_) },
+ docroot => $docroot,
+ port => 8081, # override default port to avoid a conflict
+ %ops,
hunk ./lib/Continuity/Monitor.pm 90
- bless $self, $class;
+ return $self;
hunk ./lib/Continuity/Monitor.pm 94
-has request => ( is => 'rw' );
-has trace => ( is => 'rw' );
-
-method main ($request) {
- $self->request($request);
- # my $sessions = $self->{server}->{mapper}->{sessions} or die;
- # my $session_count = scalar keys %$sessions;
- # my @sess = sort keys %$sessions;
+sub main {
+ my $self = shift;
+ my $request = shift;
+ $self->{request} = $request; # cache it so we can make shorthands like $self->print and $self->param
hunk ./lib/Continuity/Monitor.pm 108
-# my $trace = Devel::StackTrace::WithLexicals->new(
-# ignore_package => [qw( Devel::StackTrace Continuity::Monitor::CGI )]
-# );
hunk ./lib/Continuity/Monitor.pm 109
- Continuity::Monitor::Plugin::REPL->new( request => $request ),
- # Continuity::Monitor::Plugin::CallStack->new( request => $request, trace => $trace ), # XXX silly!
- Continuity::Monitor::Plugin::CallStack->new( request => $request ),
- Continuity::Monitor::Plugin::Exit->new( request => $request ),
- Continuity::Monitor::Plugin::Counter->new( request => $request ),
- Continuity::Monitor::Plugin::FileEdit->new( request => $request ),
+ Continuity::Monitor::Plugin::REPL->new( request => $request, ),
+ Continuity::Monitor::Plugin::CallStack->new( request => $request, ),
+ Continuity::Monitor::Plugin::Exit->new( request => $request, ),
+ Continuity::Monitor::Plugin::Counter->new( request => $request, ),
+ Continuity::Monitor::Plugin::FileEdit->new( request => $request, ),
hunk ./lib/Continuity/Monitor.pm 119
- # $continue &&= $plugin->process();
- # Continuity::Inspector->new( callback => sub {
- # $continue &&= $plugin->process();
- # })->inspect( $sessions->{$session} );
- $self->{server}->mapper->inspect($session, sub { $continue &&= $plugin->process() });
+ $self->{server}->mapper->inspect($session, sub { $continue &&= $plugin->process($self) });
hunk ./lib/Continuity/Monitor.pm 123
-
+ $self->process_callbacks;
hunk ./lib/Continuity/Monitor.pm 129
-method print_header {
-$SIG{__DIE__} = sub { use Carp; Carp::confess; };
+sub print_header {
+ my $self = shift;
hunk ./lib/Continuity/Monitor.pm 150
-method print_footer {
+sub print_footer {
+ my $self = shift;
hunk ./lib/Continuity/Monitor.pm 159
-1;
+#
+# taken from the MooseX crap... should go back into a library that can be use'd.
+#
hunk ./lib/Continuity/Monitor.pm 163
+sub cb_link {
+ my ($self, $text, $subref) = @_;
+ (my $name) = scalar($subref) =~ m/CODE\(0x(.*)\)/;
+ $self->{callback}->{$name} = $subref;
+ return qq{$text };
+}
hunk ./lib/Continuity/Monitor.pm 170
-__END__
-
-the old stuff:
+sub cb_button {
+ my ($self, $text, $subref) = @_;
+ (my $name) = scalar($subref) =~ m/CODE\(0x(.*)\)/;
+ $self->{callback}->{$name} = $subref;
+ return qq{ };
+}
hunk ./lib/Continuity/Monitor.pm 177
-sub main {
- my ($self, $request) = @_;
- $self->{request} = $request;
- while(1) {
- my $sessions = $self->{server}->{mapper}->{sessions} or die;
- my $session_count = scalar keys %$sessions;
- my @sess = sort keys %$sessions;
- @sess = map { qq{$_ \n} } @sess;
- $request->print("$session_count sessions: ");
- $request->next;
- my $sess = $request->param('inspect_sess');
- if($sess) {
- $self->inspect_session($sessions->{$sess});
+sub process_callbacks {
+ my ($self, $clear) = @_;
+ defined($clear) or $clear = 1; # $clear //= 1;
+ my $callback = $self->{callback};
+ $self->{callback} = { } if $clear;
+ my $name = $self->param('callback');
+ if($name && defined $callback->{$name}) {
+ # handle URLs with parameters like ?callback=deadbeef
+ $callback->{$name}->($self);
+ return 1;
+ }
+ foreach my $name (keys %$callback) {
+ # handle URLs with parameters like ?deadbeef=blargh
+ if($self->param($name)) {
+ $callback->{$name}->($self);
+ return 1;
hunk ./lib/Continuity/Monitor.pm 195
+ return 0;
hunk ./lib/Continuity/Monitor.pm 198
-sub get_session_vars {
- my ($self, $session) = @_;
- my $request = $self->{request};
- my @vars;
- my $inspector = Continuity::Inspector->new( callback => sub {
- $Data::Dumper::Sortkeys = 1;
- $Data::Dumper::Terse = 1;
- $Data::Dumper::Maxdepth = 2;
- for my $i (1..100) {
- my $vars = eval { peek_my($i) } or last;
- my ($package, $filename, $line, $subroutine) = caller($i-1);
- my ($package2, $filename2, $line2, $subroutine2) = caller($i);
- # Skip over Continuity and Coro specific frames
- next if $package =~ /^(Continuity|Coro)/;
- next if $subroutine2 =~ /^(Continuity|Coro)::/;
- push @vars, {
- level => $i,
- package => $package,
- filename => $filename,
- line => $line,
- subroutine => $subroutine2,
- vars => $vars,
- expand => 0,
- };
- }
- });
- $inspector->inspect( $session );
- return @vars;
+sub field_name {
+ # unique field names for auto-generated input fields
+ my $self = shift;
+ my $name = shift;
+ $self->{last_field_name}++;
+ return join '_', $name, 0+$self, 0+$Coro::current, $self->{last_field_name};
hunk ./lib/Continuity/Monitor.pm 206
+# little shorthand things over $self->{request}->print and the like
hunk ./lib/Continuity/Monitor.pm 208
-sub inspect_session {
- my ($self, $session) = @_;
- my $request = $self->{request};
-
- my @explore = $self->get_session_vars($session);
-
- #$Data::Dumper::Maxdepth = 4;
- #$request->print("DUMP:\n\n" . Dumper(\@explore) . "\n\n");
-
- while(1) {
- $request->print(qq{
- Exit
- REPL
-
- });
- my $offset = 0;
- my $tree = [];
- foreach my $scope (@explore) {
- $request->print(qq{
-
- +
- $scope->{subroutine} ($scope->{filename}:$scope->{line})
- });
- if($scope->{expand}) {
- $request->print("");
- my $var_dump = join ' ',
- map { encode_entities("$_ = " . Dumper($scope->{vars}{$_})) } keys %{$scope->{vars}};
- $request->print($var_dump);
- $request->print(" ");
- }
- $request->print(" ");
- $offset++;
- }
- $request->print(' ');
- $request->next;
- last if $request->param('action') eq 'exit';
- if($request->param('action') eq 'repl') {
- $self->repl($session);
- }
- my $scope = $request->param('toggle');
- $explore[$scope]->{expand} += 1;
- $explore[$scope]->{expand} %= 2;
- }
+sub request :lvalue {
+ $_[0]->{request} = $_[1] if @_ == 2;
+ $_[0]->{request};
hunk ./lib/Continuity/Monitor.pm 213
-sub repl {
- my ($self, $session) = @_;
- my $inspector = Continuity::Inspector->new( callback => sub {
- my $repl = Continuity::Monitor::REPL->new( request => $self->{request} );
- $repl->repl->run;
- });
- $inspector->inspect( $session );
+sub param {
+ my ($self, @v) = @_;
+ return $self->request->param(@v);
+}
+
+sub params {
+ my ($self, @v) = @_;
+ return $self->request->params(@v);
+}
+
+sub next {
+ my ($self) = @_;
+ $self->request->next;
+ return $self;
+}
+
+sub print {
+ my $self = shift @_;
+ $self->request->print(@_);
hunk ./lib/Continuity/Monitor.pm 234
-
hunk ./lib/MooseX/Continuity/CallbackLinks.pm 19
+
+use Carp 'confess';
+$self->uuid or confess;
+$name or confess;
+
hunk ./lib/Continuity/Monitor.pm 16
-use Continuity::Monitor::Plugin::REPL;
+use Continuity::Monitor::Plugin::REPLother;
hunk ./lib/Continuity/Monitor.pm 109
- Continuity::Monitor::Plugin::REPL->new( request => $request, ),
+ Continuity::Monitor::Plugin::REPLother->new( request => $request, ),
hunk ./lib/Continuity/Monitor/CGI.pm 3
+# XXX this needs to use those various MooseX::Continuity roles
+
hunk ./lib/Continuity/Monitor/CGI.pm 102
- $continue &&= $plugin->process();
+ $continue &&= $plugin->process($self);
hunk ./lib/Continuity/Monitor/Plugin/CallStack.pm 4
+use Data::Visitor::Callback;
addfile ./lib/Continuity/Monitor/Plugin/REPLother.pm
hunk ./lib/Continuity/Monitor/Plugin/REPLother.pm 1
+package Continuity::Monitor::Plugin::REPLother;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+# a simpler REPL that doesn't want its own coroutine so it can be injected
+# into other coroutines to operate.
+
+sub new {
+ my $package = shift;
+ bless { }, $package;
+}
+
+sub process {
+ my $self = shift;
+ my $monitor = shift;
+ my $request = $monitor->request;
+
+ my $output = $self->{output} || '';
+
+ $request->print(qq{
+
+ });
+
+ $self->{output} = $output; # XXX tail to the last 1000 lines or something?
+
+ 1;
+}
+
+=head1 SEE ALSO
+
+L, L, L
+
+=head1 AUTHOR
+
+ Brock Wilcox - http://thelackthereof.org/
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2008 Brock Wilcox . All rights
+ reserved. This program is free software; you can redistribute it and/or modify
+ it under the same terms as Perl 5.10 or later.
+
+=cut
+
+1;
+