/usr/local/CPAN/Video-PlaybackMachine/Video/PlaybackMachine/MemoryLogger.pm
package Video::PlaybackMachine::MemoryLogger;
####
#### Video::PlaybackMachine::MemoryLogger
####
#### $Revision: 343 $
####
#### Logs memory consumed by the current process.
####
use strict;
use warnings;
use POE;
use POE::Session;
use Log::Log4perl;
use Proc::ProcessTable;
############################# Class Constants #############################
our $CHECK_INTERVAL = 30;
############################## Class Methods ##############################
##
## new()
##
##
sub new
{
my $type = shift;
my $self = {};
$self->{'pt'} = Proc::ProcessTable->new();
$self->{'logger'} = Log::Log4perl->get_logger('Video::PlaybackMachine::MemoryLogger');
bless $self, $type;
}
############################# Object Methods ##############################
sub spawn
{
my $self = shift;
POE::Session->create( object_states => [ $self => [qw(_start update)] ] );
}
############################# Session Methods #############################
##
## _start()
##
## POE startup state.
##
## Called when the session begins.
sub _start
{
$_[KERNEL]->yield('update');
}
##
## update()
##
## Checks memory and writes out the result to system log
##
sub update
{
my ($kernel, $self) = @_[KERNEL, OBJECT];
my $cp;
foreach my $proc ( @{ $self->{'pt'}->table() } ) {
if ($proc->pid() == $$) {
$cp = $proc;
last;
}
}
$self->{'logger'}->debug("Memory for $$: " . $cp->rss() . " rss " . $cp->size() . " size");
$kernel->delay('update', $CHECK_INTERVAL);
}
1;