API workers using Gearman::Driver
[cloudstore.git] / data-worker.pl
index af8a2bd..9d321a9 100755 (executable)
@@ -6,30 +6,32 @@ use Data::Dump qw(dump);
 use DBI;
 use JSON::XS;
 
-my $log = sub {
-       my $job = shift;
+sub insert {
+       my ($table,$job) = @_;
 
-       my $json = decode_json $job->arg;
-       warn "## log ",dump( $json );
+       my $hash = decode_json $job->arg;
+
+       print "insert $table ",dump($hash),$/;
 
        my $dbh = DBI->connect_cached('DBI:Pg:dbname=cloudstore','','', {
                RaiseError => 1,
                AutoCommit => 1,
        });
 
-       my @k = keys %$json;
+       my @k = keys %$hash;
 
-       my $sql = sprintf 'INSERT INTO log (%s) values (%s)',
+       my $sql = sprintf 'INSERT INTO %s (%s) values (%s)', $table,
                join(',',@k), join(',', map { '?' } @k);
+
        warn "# $sql";
        my $sth = $dbh->prepare($sql);
-       $sth->execute( map { $json->{$_} } @k );
+       $sth->execute( map { $hash->{$_} } @k );
 };
 
 use Gearman::Worker;
 my $worker = Gearman::Worker->new;
 $worker->job_servers('127.0.0.1:4730');
-$worker->register_function( log => $log );
+$worker->register_function( rsync_transfer => sub { insert 'rsync_transfer' => shift } );
 
 warn "$0 pid $$ waitng for jobs\n";
 $worker->work while 1;