[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