decode json and deduplicate changes
[NoSQL-toys.git] / couchdb / couchdb-changes.pl
1 #!/usr/bin/perl
2
3 # http://wiki.apache.org/couchdb/HTTP_database_API#Changes
4
5 use warnings;
6 use strict;
7
8 use LWP::UserAgent;
9 use Data::Dump qw(dump);
10 use JSON::XS;
11
12 my $ua = LWP::UserAgent->new;
13 $ua->timeout( 15 ); # re-cycle request every hour
14 $ua->env_proxy;
15
16 my $seqnum = 0;
17 our $last_rev = '';
18
19 while(1) {
20
21
22 my $response = $ua->get(
23         'http://localhost:5984/monitor/_changes?feed=continuous;include_docs=true;since='.$seqnum
24         , ':content_cb' => sub {
25                 my ( $data, $response, $protocol ) = @_;
26                 my $json = decode_json $data;
27                 my $rev = $json->{changes}->[0]->{rev} || warn "no rev";
28                 if ( $last_rev eq $rev ) {
29                         warn "duplicate $last_rev\n";
30                 } else {
31                         $last_rev = $rev;
32                         warn "# $rev ",dump( $json );
33                         $seqnum = $json->{last_seq} if exists $json->{last_seq};
34                 }
35         }
36 );
37
38 if ($response->is_success) {
39         print "seqnum: $seqnum";
40 }
41 else {
42         die $response->status_line;
43 }
44
45
46 }#while