[Jifty-commit] r6824 - in plugins/Jifty-Plugin-LeakTracker: . lib/Jifty/Plugin/LeakTracker

Jifty commits jifty-commit at lists.jifty.org
Wed Apr 22 04:53:35 EDT 2009


Author: sartak
Date: Wed Apr 22 04:53:35 2009
New Revision: 6824

Removed:
   plugins/Jifty-Plugin-LeakTracker/lib/Jifty/Plugin/LeakTracker/Dispatcher.pm
   plugins/Jifty-Plugin-LeakTracker/lib/Jifty/Plugin/LeakTracker/View.pm
Modified:
   plugins/Jifty-Plugin-LeakTracker/Makefile.PL
   plugins/Jifty-Plugin-LeakTracker/lib/Jifty/Plugin/LeakTracker.pm

Log:
Reimplementation using Jifty::Plugin::RequestInspector

Modified: plugins/Jifty-Plugin-LeakTracker/Makefile.PL
==============================================================================
--- plugins/Jifty-Plugin-LeakTracker/Makefile.PL	(original)
+++ plugins/Jifty-Plugin-LeakTracker/Makefile.PL	Wed Apr 22 04:53:35 2009
@@ -4,8 +4,6 @@
 
 requires('Jifty');
 requires('Devel::Events::Objects' => '0.02'); # Devel::Events::Handler::ObjectTracker Devel::Events::Generator::Objects
-requires('Devel::Size');
-requires('Proc::ProcessTable');
 
 auto_install();
 tests(qw( t/*/t/*.t ));

Modified: plugins/Jifty-Plugin-LeakTracker/lib/Jifty/Plugin/LeakTracker.pm
==============================================================================
--- plugins/Jifty-Plugin-LeakTracker/lib/Jifty/Plugin/LeakTracker.pm	(original)
+++ plugins/Jifty-Plugin-LeakTracker/lib/Jifty/Plugin/LeakTracker.pm	Wed Apr 22 04:53:35 2009
@@ -1,47 +1,7 @@
+package Jifty::Plugin::LeakTracker;
 use strict;
 use warnings;
-
-package Jifty::Plugin::LeakTracker;
-use base qw/Jifty::Plugin Class::Data::Inheritable/;
-use Data::Dumper;
-
-=head1 NAME
-
-Jifty::Plugin::LeakTracker - Leak tracker plugin
-
-=head1 DESCRIPTION
-
-Memory leak detection and reporting for your Jifty app
-
-=head1 USAGE
-
-Add the following to your site_config.yml
-
- framework:
-   Plugins:
-     - LeakTracker: {}
-
-This makes the following URLs available:
-
-View the top-level leak report (how much each request has leaked)
-
-    http://your.app/__jifty/admin/leaks
-
-View the top-level leak report, including zero-leak requests
-
-    http://your.app/__jifty/admin/leaks/all
-
-View an individual request's detailed leak report (which objects were leaked)
-
-    http://your.app/__jifty/admin/leaks/3
-
-=head1 WARNING
-
-If you use this in production, be sure to block off 'leaks' from
-non-administrators. The full Data::Dumper output of the objects
-leaked is available, which may of course contain sensitive information.
-
-=cut
+use base 'Jifty::Plugin';
 
 BEGIN {
     if (!$INC{"Devel/Events/Generator/Objects.pm"}) {
@@ -55,106 +15,58 @@
 
 our $VERSION = 0.01;
 
-__PACKAGE__->mk_accessors(qw(tracker generator));
-our @requests;
-
-my $empty_array = total_size([]);
-
-=head1 METHODS
-
-=head2 init
-
-init installs the triggers needed around each HTTP request
-
-=cut
-
-sub init {
+sub inspect_before_request {
     my $self = shift;
-    return if $self->_pre_init;
 
-    Jifty::Handler->add_trigger(
-        before_request => sub { $self->before_request(@_) }
-    );
-
-    Jifty::Handler->add_trigger(
-        after_request  => sub { $self->after_request(@_) }
-    );
+    my $tracker = Devel::Events::Handler::ObjectTracker->new;
+    my $generator = Devel::Events::Generator::Objects->new(handler => $tracker);
+    $generator->enable;
+
+    return [$tracker, $generator];
 }
 
-=head2 before_request
+sub inspect_after_request {
+    my $self = shift;
+    my ($tracker, $generator) = @{ $_[0] };
 
-This trigger sets up Devel::Events to instrument bless and free so it can keep
-track of all the objects created and destroyed in this request
+    $generator->disable;
 
-=cut
+    my $leaked = $tracker->live_objects;
+    my @leaks = keys %$leaked;
 
-sub before_request
-{
-    my $self = shift;
-    $self->tracker(Devel::Events::Handler::ObjectTracker->new());
-    $self->generator(
-        Devel::Events::Generator::Objects->new(handler => $self->tracker)
-    );
+    # XXX: Devel::Size seems to segfault Jifty at END time
+    my $size = total_size([ @leaks ]) - total_size([]);
 
-    $self->generator->enable();
+    return {
+        size  => $size,
+        leaks => \@leaks,
+    },
 }
 
-=head2 after_request
-
-This extracts all the data gathered by Devel::Events and puts it into the
-global C<@Jifty::Plugin::LeakTracker::requests> so the LeakTracker dispatcher
-and views can query it to make nice reports
+1;
 
-=cut
+__END__
 
-sub after_request
-{
-    my $self = shift;
-    my $handler = shift;
-    my $cgi = shift;
+=head1 NAME
 
-    $self->generator->disable();
+Jifty::Plugin::LeakTracker - Leak tracker plugin
 
-    my $leaked = $self->tracker->live_objects;
-    my @leaks = keys %$leaked;
+=head1 DESCRIPTION
 
-    # XXX: Devel::Size seems to segfault Jifty at END time
-    my $size = total_size([ @leaks ]) - $empty_array;
+Memory leak detection and reporting for your Jifty app
 
-    my $total = '?';
+=head1 USAGE
 
-    # report total memory, if able
-    eval {
-        require Proc::ProcessTable;
-        my $proc = Proc::ProcessTable->new;
-        for (@{ $proc->table }) {
-            next unless $_->pid == $$;
-            $total = $_->size;
-            last;
-        }
-    };
-    $self->log->warn($@) if $@;
-
-    push @requests, {
-        id => 1 + @requests,
-        url => $cgi->url(-absolute=>1,-path_info=>1),
-        size => $size,
-        objects => Dumper($leaked),
-        time => scalar gmtime,
-        leaks => \@leaks,
-        total => $total,
-    };
+Add the following to your site_config.yml
 
-    $self->generator(undef);
-    $self->tracker(undef);
-}
+ framework:
+   Plugins:
+     - LeakTracker: {}
 
 =head1 SEE ALSO
 
 L<Jifty::Plugin::Gladiator>
 
-L<Jifty::Plugin::LeakTracker::View>, L<Jifty::Plugin::LeakTracker::Dispatcher>
-
 =head1 COPYRIGHT AND LICENSE
 
 Copyright 2007 Best Practical Solutions
@@ -163,5 +75,3 @@
 
 =cut
 
-1;
-


More information about the Jifty-commit mailing list