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 )