store data in PostgreSQL table
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 12 Mar 2011 15:23:15 +0000 (16:23 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 12 Mar 2011 15:23:15 +0000 (16:23 +0100)
lib/APKPM/Store.pm [new file with mode: 0644]
sql/adsl.sql [new file with mode: 0644]
t/Store.t [new file with mode: 0755]

diff --git a/lib/APKPM/Store.pm b/lib/APKPM/Store.pm
new file mode 100644 (file)
index 0000000..66932f6
--- /dev/null
@@ -0,0 +1,40 @@
+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;
diff --git a/sql/adsl.sql b/sql/adsl.sql
new file mode 100644 (file)
index 0000000..b6886bb
--- /dev/null
@@ -0,0 +1,12 @@
+create table adsl (
+SNRTX float,
+ATTNTX float,
+MAXTX integer,
+PWRTX float,
+PWRRX float,
+TX integer,
+RX integer,
+MAXRX integer,
+ATTNRX float,
+SNRRX float
+);
diff --git a/t/Store.t b/t/Store.t
new file mode 100755 (executable)
index 0000000..897e855
--- /dev/null
+++ b/t/Store.t
@@ -0,0 +1,27 @@
+#!/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);