/[pxelator]/lib/PXElator/store.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /lib/PXElator/store.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 505 - (hide annotations)
Wed Jul 21 15:34:34 2010 UTC (13 years, 8 months ago) by dpavlin
File size: 1644 byte(s)
work without mongodb available
1 dpavlin 481 package store;
2    
3     use warnings;
4     use strict;
5    
6 dpavlin 483 use POSIX;
7 dpavlin 485 use Time::HiRes qw/time/;
8 dpavlin 496 use Data::Dump qw(dump);
9 dpavlin 483
10 dpavlin 485 use MongoDB;
11 dpavlin 481
12 dpavlin 505 our $audit;
13 dpavlin 483
14 dpavlin 505 eval {
15     my $conn = MongoDB::Connection->new;
16     my $db = $conn->get_database( 'pxelator' );
17     $audit = $db->get_collection( 'audit' );
18     };
19     warn "ERROR: no store for audit: $@" if $@;
20 dpavlin 483
21 dpavlin 505
22 dpavlin 483 sub audit {
23     my $data = pop @_;
24    
25     my $url = join(' ', @_);
26     $url =~ s/\s+-\S+//g; # remove command line options
27     $url =~ s/\W+/-/g;
28    
29     my $time = time();
30    
31     my @caller = caller(0);
32     $caller[3] = (caller(1))[3];
33     $caller[3] =~ s{^.+::}{}; # stip package name from sub
34     $data->{package} = {
35     time => $time,
36     name => $caller[0],
37     line => $caller[2],
38     caller => $caller[3],
39     };
40    
41     if ( $ENV{DEBUG} ) {
42    
43     my $caller;
44     my $depth = 0;
45     while ( my @c = caller($depth) ) {
46     push @$caller, [ @c ];
47     $depth++;
48     }
49    
50     $data->{caller} = $caller;
51    
52     }
53    
54     # carp 'audit ', dump($data);
55    
56     # $time = int($time); # reduce granularity for url
57     $time = strftime("%Y-%m-%d.%H:%M:%S", localtime $time);
58     my $package = $caller[0];
59    
60 dpavlin 485 # CouchDB::_store_audit( "$time.$package.$url" => $data );
61 dpavlin 483
62 dpavlin 485 # $data->{_id} = "$time.$package.$url";
63 dpavlin 505 #
64     if ( $audit ) {
65     $audit->insert( $data );
66     } else {
67     warn "AUDIT ",dump($data);
68     }
69 dpavlin 483 }
70    
71    
72 dpavlin 487 sub query {
73 dpavlin 496 my ( $from_t, $callback ) = @_;
74     my $q;
75 dpavlin 497 $q->{'package.time'} = { '$lt' => $from_t * 1 } if $from_t;
76     # $q->{'package.name'} = { '$ne' => 'syslogd' };
77     $q->{'tag'} = { '$ne' => 'CRON' };
78 dpavlin 496 warn "# query ", dump($q);
79     $audit->ensure_index({ 'package.name' => 1 });
80     my $cursor = $audit->query($q)->sort({ 'package.time' => -1 })->limit( 100 );
81 dpavlin 487 while( my $o = $cursor->next ) {
82     $callback->( $o );
83     }
84     }
85    
86 dpavlin 481 1;

  ViewVC Help
Powered by ViewVC 1.1.26