Gearman-SlotManager
view release on metacpan or search on metacpan
lib/Gearman/SlotWorker.pm view on Meta::CPAN
package Gearman::SlotWorker;
use namespace::autoclean;
# ABSTRACT: A worker launched by Slot
our $VERSION = '0.3'; # VERSION
use Devel::GlobalDestruction;
use Log::Log4perl qw(:easy);
#Log::Log4perl->easy_init($DEBUG);
Log::Log4perl->easy_init($ERROR);
use Any::Moose;
use Gearman::Worker;
use Scalar::Util qw(weaken);
use LWP::Simple;
# options
has job_servers=>(is=>'rw',isa=>'ArrayRef', required=>1);
has channel=>(is=>'rw',required=>1);
has workleft=>(is=>'rw',isa=>'Int', default=>-1);
# internal
has exported=>(is=>'ro',isa=>'ArrayRef[Class::MOP::Method]', default=>sub{[]});
has worker=>(is=>'rw');
has is_stopped=>(is=>'rw');
has is_busy=>(is=>'rw');
has sbbaseurl=>(is=>'rw',default=>sub{''});
sub BUILD{
my $self = shift;
# register
my $meta = $self->meta();
my $package = $meta->{package};
my $exported = $self->exported();
if( $self->workleft == 0 ){
$self->workleft(-1);
}
for my $method ( $meta->get_all_methods)
{
my $packname = $method->package_name;
next if( $packname eq __PACKAGE__ ); # skip base class
my $methname = $method->name;
if( $packname eq $package )
{
if( $methname !~ /^_/ && $methname ne uc($methname) && $methname ne 'meta' )
{
if( !$meta->has_attribute($methname) ){
DEBUG 'filtered: '.$method->fully_qualified_name;
push(@{$exported},$method);
}
}
}
}
$self->register();
weaken($self);
}
sub report{
my $self = shift;
my $msg = lc(shift);
if($self->sbbaseurl){
DEBUG "report $msg ".$self->channel;
get($self->sbbaseurl.'/'.$msg.'?channel='.$self->channel);
}
}
sub unregister{
my $self = shift;
foreach my $m (@{$self->exported}){
my $fname = $m->fully_qualified_name;
$self->worker->unregister_function($fname);
}
$self->worker(undef);
}
sub register{
my $self = shift;
( run in 1.356 second using v1.01-cache-2.11-cpan-99c4e6809bf )