--- /dev/null
+-- drop database cloudstore;
+-- create database cloudstore;
+drop table log;
+create table log (
+ timestamp timestamp, -- 2011/07/16 09:45:32
+ ip inet, -- 127.0.0.1
+ login text, -- dpavlin
+ host text, -- localhost
+ op text, -- recv
+ file text, -- :foo
+ pid int, -- 906
+ len int, -- 9334
+ transfered int, -- 9374
+ mtime timestamp, -- 2011/07/16-09:45:32
+ perms text, -- rw-r--r--
+ updated text -- >f+++++++++
+);
use Data::Dump qw(dump);
use English;
use JSON::XS;
+use DBI;
my $dir = '/srv/cloudstore/var';
my $log_fifo = "$dir/rsyncd.log";
my $cfg_file = "$dir/rsyncd.conf";
my $users = "users";
+my $dbh = DBI->connect_cached('DBI:Pg:dbname=cloudstore','','', {
+ RaiseError => 1,
+ AutoCommit => 1,
+});
+
mkdir $dir if ! -e $dir;
mkfifo $log_fifo, 0700 unless -p $log_fifo;
my $transfer_log = {
ip => '%a',
- user => '%u',
+ login => '%u',
host => '%h',
perms => '%B',
file => '%f',
updated => '%i',
len => '%l',
transfered => '%b',
- module => '%m',
+# module => '%m',
mtime => '%M',
op => '%o',
pid => '%p',
print "transfer-log:",dump(\%data),$/;
my $path = sprintf "users/%s/data/%.5f-%d",
- $data{user}, Time::HiRes::time(), $data{pid};
+ $data{login}, Time::HiRes::time(), $data{pid};
open(my $json, '>', $path);
print $json encode_json \%data;
close $json;
print $path, " ", -s $path, " bytes\n";
+
+ my $sql = sprintf 'INSERT INTO log (%s) values (%s)',
+ join(',',@k), join(',', map { '?' } @v);
+ warn "# $sql";
+ my $sth = $dbh->prepare($sql);
+ $sth->execute( @v );
}
}
close($log);