3 # http://wiki.apache.org/couchdb/HTTP_database_API#Changes
8 use lib 'common/mojo/lib';
13 my $url = 'http://localhost:5984/monitor/_changes?feed=continuous;include_docs=true;since=';
16 my $client = Mojo::UserAgent->new;
17 my $json = Mojo::JSON->new;
20 $client->keep_alive_timeout(90); # couchdb timeout is 60s
24 warn "GET $url$seq\n";
25 my $tx = $client->build_tx( GET => $url . $seq );
27 my ( $content, $body ) = @_;
29 warn "## BODY $body\n";
31 if ( length($body) == 0 ) {
32 warn "# empty chunk, heartbeat?\n";
36 foreach my $change ( split(/\r?\n/, $body) ) { # we can get multiple documents in one chunk
38 my $data = $json->decode($change);
40 if ( exists $data->{error} ) {
42 } elsif ( exists $data->{last_seq} ) {
43 $seq = $data->{last_seq};
44 } elsif ( $data->{seq} <= $seq ) {
46 } elsif ( exists $data->{changes} ) {
48 my $id = $data->{id} || warn "no id?";
49 my $rev = $data->{changes}->[0]->{rev} || warn "no rev?";
50 $seq = $data->{seq} || warn "no seq?";
52 warn "# doc ", $json->encode( $data->{doc} ); # FIXME custom code here
55 warn "UNKNOWN", $json->encode($data);
65 die "ERROR ", $json->encode($error) if $error;