decode json and deduplicate changes master
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 21 Nov 2010 22:18:23 +0000 (23:18 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 21 Nov 2010 22:18:23 +0000 (23:18 +0100)
couchdb/couchdb-changes.pl

index 73fea3a..9b02241 100755 (executable)
@@ -7,23 +7,40 @@ use strict;
 
 use LWP::UserAgent;
 use Data::Dump qw(dump);
+use JSON::XS;
 
 my $ua = LWP::UserAgent->new;
-$ua->timeout( 60 * 60 );
+$ua->timeout( 15 ); # re-cycle request every hour
 $ua->env_proxy;
 
+my $seqnum = 0;
+our $last_rev = '';
+
+while(1) {
+
+
 my $response = $ua->get(
-       'http://localhost:5984/monitor/_changes?feed=continuous'
+       'http://localhost:5984/monitor/_changes?feed=continuous;include_docs=true;since='.$seqnum
        , ':content_cb' => sub {
                my ( $data, $response, $protocol ) = @_;
-               warn dump( $data );
+               my $json = decode_json $data;
+               my $rev = $json->{changes}->[0]->{rev} || warn "no rev";
+               if ( $last_rev eq $rev ) {
+                       warn "duplicate $last_rev\n";
+               } else {
+                       $last_rev = $rev;
+                       warn "# $rev ",dump( $json );
+                       $seqnum = $json->{last_seq} if exists $json->{last_seq};
+               }
        }
 );
 
 if ($response->is_success) {
-       print $response->decoded_content;  # or whatever
+       print "seqnum: $seqnum";
 }
 else {
        die $response->status_line;
 }
 
+
+}#while