From e75d1580a481bd84b1667d7050cfdef08527bb2b Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sat, 12 Mar 2011 16:23:15 +0100 Subject: [PATCH] store data in PostgreSQL table --- lib/APKPM/Store.pm | 40 ++++++++++++++++++++++++++++++++++++++++ sql/adsl.sql | 12 ++++++++++++ t/Store.t | 27 +++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 lib/APKPM/Store.pm create mode 100644 sql/adsl.sql create mode 100755 t/Store.t diff --git a/lib/APKPM/Store.pm b/lib/APKPM/Store.pm new file mode 100644 index 0000000..66932f6 --- /dev/null +++ b/lib/APKPM/Store.pm @@ -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 index 0000000..b6886bb --- /dev/null +++ b/sql/adsl.sql @@ -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 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); -- 2.20.1