store data in PostgreSQL table
[APKPM.git] / lib / APKPM / Store.pm
1 package APKPM::Store;
2
3 use base qw(Gearman::Driver::Worker);
4 use Moose;
5 use Time::HiRes;
6 use JSON::XS;
7 use Data::Dump qw(dump);
8 use DBD::Pg;
9
10 sub prefix { 'Store_' }
11
12 sub process_name {
13         my ( $self, $orig, $job_name ) = @_;
14         warn "# process_name $orig $job_name\n";
15         return "$orig ($job_name)";
16 }
17
18 sub ADSL : Job : MinProcesses(1) : MaxProcesses(5) : Decode {
19         my ( $self, $job, $workload ) = @_;
20         warn "# ADSL ",dump($workload);
21         my $dbh = DBI->connect_cached('DBI:Pg:dbname=apkpm','','', {
22                 RaiseError => 1,
23                 AutoCommit => 1,
24         });
25
26         my @c = keys %$workload;
27
28         my $sql = 'INSERT INTO adsl (' . join(',',@c) . ') values (' . join(',', map { '?' } 0 .. $#c) . ')';
29         warn $sql;
30         my $sth = $dbh->prepare($sql);
31         $sth->execute( map { $workload->{$_} } @c );
32 }
33
34 sub decode {
35         my ( $self, $workload ) = @_;
36         warn "# decode ", dump $workload;
37         return JSON::XS::decode_json($workload);
38 }
39
40 1;