Hopkins-Plugin-RPC
view release on metacpan or search on metacpan
lib/Hopkins/Plugin/RPC.pm view on Meta::CPAN
my $kernel = $_[KERNEL];
my $res = $_[ARG0];
# grab the client, the SOAP parameters, and the name of
# the queue that we've been requested to start up.
my $client = $res->connection->remote_ip;
my $params = $res->soapbody;
my ($name) = map { $params->{$_} } sort keys %$params;
Hopkins->log_debug("queue shutdown request received from $client for $name");
$kernel->post(manager => queue_shutdown => $name);
$kernel->alarm(queue_stop_waitchk => time + HOPKINS_RPC_QUEUE_STATUS_WAIT_TIME, $res, $name, 0);
}
sub queue_flush
{
my $kernel = $_[KERNEL];
my $res = $_[ARG0];
# grab the client, the SOAP parameters, and the name of
# the queue that we've been requested to start up.
my $client = $res->connection->remote_ip;
my $params = $res->soapbody;
my ($name) = map { $params->{$_} } sort keys %$params;
Hopkins->log_debug("queue_flush request received from $client for $name");
$kernel->post(manager => queue_flush => $name);
$res->content({ success => 1 });
$kernel->post('rpc.soap' => DONE => $res);
}
sub queue_start_waitchk
{
my $self = $_[OBJECT];
my $kernel = $_[KERNEL];
my $res = $_[ARG0];
my $name = $_[ARG1];
my $iter = $_[ARG2];
Hopkins->log_debug("queue_start_waitchk: checking status of queue $name");
my $queue = $self->manager->queue($name);
if ($queue && $queue->is_running) {
# the session was located; the queue is now running.
#
# post a DONE event to the soap session; this will
# cause a SOAP response to be sent back to the
# client.
$res->content({ success => 1 });
$kernel->post('rpc.soap' => DONE => $res);
} else {
# if the session wasn't found, we'll try to wait a
# bit for it to show up. if we exceed the maximum
# number of wait iterations, we'll return an error
# to the client.
if ($iter > HOPKINS_RPC_QUEUE_STATUS_WAIT_ITER_MAX) {
# exceeded maximum wait iterations; return an
# error to the client.
$res->content({ success => 0, err => "unable to start queue $name" });
$kernel->post('rpc.soap' => DONE => $res);
} else {
# else we'll go another round. set a kernel
# alarm for the appropriate time.
$kernel->alarm(queue_start_waitchk => time + HOPKINS_RPC_QUEUE_STATUS_WAIT_TIME, $res, $name, ++$iter);
}
}
}
sub queue_stop_waitchk
{
my $self = $_[OBJECT];
my $kernel = $_[KERNEL];
my $res = $_[ARG0];
my $name = $_[ARG1];
my $iter = $_[ARG2];
Hopkins->log_debug("queue_stop_waitchk: checking status of queue $name");
my $queue = $self->manager->queue($name);
if (not $queue or not $queue->is_running) {
# the session is gone; the queue is now stopped.
#
# post a DONE event to the soap session; this will
# cause a SOAP response to be sent back to the
# client.
$res->content({ success => 1 });
$kernel->post('rpc.soap' => DONE => $res);
} else {
# if the session was found, we'll try to wait a bit
# for it to be stopped. if we exceed the maximum
# number of wait iterations, we'll return an error
# to the client.
if ($iter > HOPKINS_RPC_QUEUE_STATUS_WAIT_ITER_MAX) {
# exceeded maximum wait iterations; return an
# error to the client.
$res->content({ success => 0, err => "unable to stop $name" });
$kernel->post('rpc.soap' => DONE => $res);
} else {
# else we'll go another round. set a kernel
# alarm for the appropriate time.
$kernel->alarm(queue_stop_waitchk => time + HOPKINS_RPC_QUEUE_STATUS_WAIT_TIME, $res, $name, ++$iter);
}
}
}
=head1 AUTHOR
Mike Eldridge <diz@cpan.org>
=head1 LICENSE
This program is free software; you may redistribute it
and/or modify it under the same terms as Perl itself.
=cut
1;
( run in 0.759 second using v1.01-cache-2.11-cpan-71847e10f99 )