App-MultiModule-Tasks-DocGateway
view release on metacpan or search on metacpan
lib/App/MultiModule/Tasks/DocGateway.pm view on Meta::CPAN
=cut
sub message {
my $self = shift;
my $message = shift;
my %args = @_;
$self->debug('message', message => $message)
if $self->{debug} > 5;
my $state = $self->{state};
#TODO: validate document_database, document_collection, document_method here
$self->_find($message) if $message->{document_method} eq 'find';
$self->_insert($message) if $message->{document_method} eq 'insert';
$self->_remove($message) if $message->{document_method} eq 'remove';
$self->_upsert($message) if $message->{document_method} eq 'upsert';
}
sub _upsert {
my $self = shift;
my $message = shift;
#TODO: validate $message->{document_filter} here
eval {
local $SIG{ALRM} = sub { die "timed out\n"; };
my $timeout = $self->{config}->{pg_upsert_timeout} || 2;
alarm $timeout;
my $c = $self->_get_connection();
my $update;
if($message->{document_update}) {
$update = Storable::dclone($message->{document_update});
} else {
$update = Storable::dclone($message);
lib/App/MultiModule/Tasks/DocGateway.pm view on Meta::CPAN
alarm 0;
if($@) {
$self->error("App::MultiModule::Tasks::DocGateway::_upsert failed: $@");
return;
}
}
sub _remove {
my $self = shift;
my $message = shift;
#TODO: validate $message->{document_filter} here
eval {
local $SIG{ALRM} = sub { die "timed out\n"; };
my $timeout = $self->{config}->{pg_remove_timeout} || 2;
alarm $timeout;
my $c = $self->_get_connection();
$c->mongo_do(
$message->{document_database},
$message->{document_collection},
'remove',
{ filter => $message->{document_filter}});
lib/App/MultiModule/Tasks/DocGateway.pm view on Meta::CPAN
alarm 0;
if($@) {
$self->error("App::MultiModule::Tasks::DocGateway::_insert failed: $@");
return;
}
}
sub _find {
my $self = shift;
my $message = shift;
#TODO: validate $message->{document_filter} here
#TODO: variant that emits once per return document
my @emits = eval {
local $SIG{ALRM} = sub { die "timed out\n"; };
my $timeout = $self->{config}->{pg_find_timeout} || 7;
alarm $timeout;
my $c = $self->_get_connection();
my $documents = $c->mongo_find(
$message->{document_database},
$message->{document_collection},
$message->{document_filter},
( run in 0.550 second using v1.01-cache-2.11-cpan-a5abf4f5562 )