});
}
+our $redis;
+sub redis { $redis ||= Redis->new };
+
sub pg_insert {
my ( $self, $table, $h ) = @_;
- my $redis = Redis->new;
-
my @c;
- if ( my $cols = $redis->get("pg.$table") ) {
+ if ( my $cols = $self->redis->get("pg.$table") ) {
@c = split(/\s+/,$cols);
} else {
my $sth = $self->dbh->prepare( "select * from $table limit 1" );
$sth->execute;
@c = @{ $sth->{NAME_lc} };
- $redis->set( "pg.$table" => join(' ',@c) );
- $redis->expire( "pg.$table" => 5 * 60 ); # refresh every 5 min
+ $self->redis->set( "pg.$table" => join(' ',@c) );
+ $self->redis->expire( "pg.$table" => 15 * 60 ); # refresh every 15 min
}
my $sql = "INSERT INTO $table (" . join(',',@c) . ') values (' . join(',', map { '?' } 0 .. $#c) . ')';
if ( my $username = $h->{username} ) {
my $key = join('.', 'table', $table, $username);
- $redis->set( $key => $self->e_json($h) );
- $redis->expire( $key => 15 * 60 ); # 15 min timeout
+ $self->redis->set( $key => $self->e_json($h) );
+ $self->redis->expire( $key => 15 * 60 ); # 15 min timeout
}
+ $h_lc->{h} = $self->to_hstore( $h_lc->{h} ) if exists $h_lc->{h};
+
$sth->execute( map { $h_lc->{$_} } @c );
}
use strict;
use warnings;
-use Test::More tests => 12;
+use Test::More tests => 16;
use Data::Dump qw(dump);
use lib 'lib';
}), 'ping';
diag dump($r);
+ok my $r = $o->insert('job',{
+_table => 'cpe_Davolink',
+ip => '127.0.0.1',
+username => 'nobody',
+h => {
+ foo => 1,
+ bar => 2,
+}
+}), 'ping';
+
+ok( my $r = $o->redis->get( 'table.cpe_Davolink.nobody' ), 'redis' );
+ok( my $j = $o->d_json($r), 'd_json' );
+isa_ok( $j->{h}, 'HASH', 'hstore' );
+diag dump($j);
+
ok my $r = $o->sql('job', "select username,rtt from ping limit 2"), 'sql';
diag dump($r);