dispatch log entries into data gearman worker
[cloudstore.git] / data-worker.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4
5 use Data::Dump qw(dump);
6 use DBI;
7 use JSON::XS;
8
9 my $log = sub {
10         my $job = shift;
11
12         my $json = decode_json $job->arg;
13         warn "## log ",dump( $json );
14
15         my $dbh = DBI->connect_cached('DBI:Pg:dbname=cloudstore','','', {
16                 RaiseError => 1,
17                 AutoCommit => 1,
18         });
19
20         my @k = keys %$json;
21
22         my $sql = sprintf 'INSERT INTO log (%s) values (%s)',
23                 join(',',@k), join(',', map { '?' } @k);
24         warn "# $sql";
25         my $sth = $dbh->prepare($sql);
26         $sth->execute( map { $json->{$_} } @k );
27 };
28
29 use Gearman::Worker;
30 my $worker = Gearman::Worker->new;
31 $worker->job_servers('127.0.0.1:4730');
32 $worker->register_function( log => $log );
33
34 warn "$0 pid $$ waitng for jobs\n";
35 $worker->work while 1;
36