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=';
17 our $last_id_rev = '';
19 my $client = Mojo::Client->new;
20 my $json = Mojo::JSON->new;
23 $client->keep_alive_timeout(90); # couchdb timeout is 60s
27 warn "GET $url$seq\n";
28 my $tx = $client->build_tx( GET => $url . $seq );
30 my ( $content, $body ) = @_;
32 warn "## BODY $body\n";
34 if ( length($body) == 0 ) {
35 warn "# empty chunk, heartbeat?\n";
39 foreach my $change ( split(/\r?\n/, $body) ) { # we can get multiple documents in one chunk
41 my $data = $json->decode($change);
43 if ( exists $data->{error} ) {
45 } elsif ( exists $data->{last_seq} ) {
46 $seq = $data->{last_seq};
47 } elsif ( $data->{seq} <= $seq ) {
49 } elsif ( exists $data->{changes} ) {
51 my $id = $data->{id} || warn "no id?";
52 my $rev = $data->{changes}->[0]->{rev} || warn "no rev?";
53 $seq = $data->{seq} || warn "no seq?";
55 if ( $last_id_rev eq "$id $rev" ) {
56 warn "# duplicate $last_id_rev\n";
58 $last_id_rev = "$id $rev";
59 warn "# ",dump( $data );
63 warn "UNKNOWN", dump($data);
73 die dump($error) if $error;