X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FPXElator%2Fstore.pm;h=30b14da6840fb23f12121731f9727717acf43255;hb=c9d2429c9ae5ae9716d59b12fdd64d1947100f49;hp=e246781ff793be334f800b3a8229d24f1d8fcb97;hpb=dd8d45f2ccf3d70ce5c035d5dfd74c73fa3eaf03;p=pxelator diff --git a/lib/PXElator/store.pm b/lib/PXElator/store.pm index e246781..30b14da 100644 --- a/lib/PXElator/store.pm +++ b/lib/PXElator/store.pm @@ -3,8 +3,76 @@ package store; use warnings; use strict; -use CouchDB; +use POSIX; +use Time::HiRes qw/time/; +use Data::Dump qw(dump); -sub audit { CouchDB::audit(@_) } +#use CouchDB; + +use MongoDB; + +my $conn = MongoDB::Connection->new; +our $db = $conn->get_database( 'pxelator' ); +our $audit = $db->get_collection( 'audit' ); + + +sub audit { + my $data = pop @_; + + my $url = join(' ', @_); + $url =~ s/\s+-\S+//g; # remove command line options + $url =~ s/\W+/-/g; + + my $time = time(); + + my @caller = caller(0); + $caller[3] = (caller(1))[3]; + $caller[3] =~ s{^.+::}{}; # stip package name from sub + $data->{package} = { + time => $time, + name => $caller[0], + line => $caller[2], + caller => $caller[3], + }; + + if ( $ENV{DEBUG} ) { + + my $caller; + my $depth = 0; + while ( my @c = caller($depth) ) { + push @$caller, [ @c ]; + $depth++; + } + + $data->{caller} = $caller; + + } + +# carp 'audit ', dump($data); + +# $time = int($time); # reduce granularity for url + $time = strftime("%Y-%m-%d.%H:%M:%S", localtime $time); + my $package = $caller[0]; + +# CouchDB::_store_audit( "$time.$package.$url" => $data ); + +# $data->{_id} = "$time.$package.$url"; + $audit->insert( $data ); +} + + +sub query { + my ( $from_t, $callback ) = @_; + my $q; + $q->{'package.time'} = { '$lt' => $from_t * 1 } if $from_t; +# $q->{'package.name'} = { '$ne' => 'syslogd' }; + $q->{'tag'} = { '$ne' => 'CRON' }; + warn "# query ", dump($q); + $audit->ensure_index({ 'package.name' => 1 }); + my $cursor = $audit->query($q)->sort({ 'package.time' => -1 })->limit( 100 ); + while( my $o = $cursor->next ) { + $callback->( $o ); + } +} 1;