--- /dev/null
+package APKPM::Store;
+
+use base qw(Gearman::Driver::Worker);
+use Moose;
+use Time::HiRes;
+use JSON::XS;
+use Data::Dump qw(dump);
+use DBD::Pg;
+
+sub prefix { 'Store_' }
+
+sub process_name {
+ my ( $self, $orig, $job_name ) = @_;
+ warn "# process_name $orig $job_name\n";
+ return "$orig ($job_name)";
+}
+
+sub ADSL : Job : MinProcesses(1) : MaxProcesses(5) : Decode {
+ my ( $self, $job, $workload ) = @_;
+ warn "# ADSL ",dump($workload);
+ my $dbh = DBI->connect_cached('DBI:Pg:dbname=apkpm','','', {
+ RaiseError => 1,
+ AutoCommit => 1,
+ });
+
+ my @c = keys %$workload;
+
+ my $sql = 'INSERT INTO adsl (' . join(',',@c) . ') values (' . join(',', map { '?' } 0 .. $#c) . ')';
+ warn $sql;
+ my $sth = $dbh->prepare($sql);
+ $sth->execute( map { $workload->{$_} } @c );
+}
+
+sub decode {
+ my ( $self, $workload ) = @_;
+ warn "# decode ", dump $workload;
+ return JSON::XS::decode_json($workload);
+}
+
+1;
--- /dev/null
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+use Data::Dump qw(dump);
+
+use lib 'lib';
+
+use_ok 'APKPM::Store';
+
+ok my $o = APKPM::Store->new, 'new';
+
+ok my $r = $o->ADSL('job',{
+ATTNRX => "36.5",
+ATTNTX => "17.8",
+MAXRX => 13500,
+MAXTX => 880,
+PWRRX => "0.0",
+PWRTX => "12.6",
+RX => 8500,
+SNRRX => "11.4",
+SNRTX => "16.0",
+TX => 798,
+}), 'ADSL';
+
+diag dump($r);