3 # http://wiki.apache.org/couchdb/HTTP_database_API#Changes
8 use lib 'common/mojo/lib';
12 use Data::Dump qw(dump);
15 my $url = 'http://localhost:5984/monitor/_changes?feed=continuous;include_docs=true;since=';
18 my $client = Mojo::Client->new;
19 my $json = Mojo::JSON->new;
22 $client->keep_alive_timeout(90); # couchdb timeout is 60s
26 warn "GET $url$seq\n";
27 my $tx = $client->build_tx( GET => $url . $seq );
29 my ( $content, $body ) = @_;
31 warn "## BODY $body\n";
33 if ( length($body) == 0 ) {
34 warn "# empty chunk, heartbeat?\n";
38 foreach my $change ( split(/\r?\n/, $body) ) { # we can get multiple documents in one chunk
40 my $data = $json->decode($change);
42 if ( exists $data->{error} ) {
44 } elsif ( exists $data->{last_seq} ) {
45 $seq = $data->{last_seq};
46 } elsif ( $data->{seq} <= $seq ) {
48 } elsif ( exists $data->{changes} ) {
50 my $id = $data->{id} || warn "no id?";
51 my $rev = $data->{changes}->[0]->{rev} || warn "no rev?";
52 $seq = $data->{seq} || warn "no seq?";
54 warn "# ",dump( $data ); # FIXME custom code here
57 warn "UNKNOWN", dump($data);
67 die dump($error) if $error;