return columns and rows
[APKPM.git] / lib / APKPM / Store.pm
index e8eeabd..423bd0a 100644 (file)
@@ -16,20 +16,56 @@ sub process_name {
        return "$orig ($job_name)";
 }
 
-sub ADSL : Job : MinProcesses(1) : MaxProcesses(5) : Decode(d_json) {
-       my ( $self, $job, $workload ) = @_;
-       warn "# ADSL ",dump($workload);
-       my $dbh = DBI->connect_cached('DBI:Pg:dbname=apkpm','','', {
+sub dbh {
+       DBI->connect_cached('DBI:Pg:dbname=apkpm','','', {
                RaiseError => 1,
                AutoCommit => 1,
        });
+}
 
-       my @c = keys %$workload;
+sub pg_insert {
+       my ( $self, $table, $h ) = @_;
 
-       my $sql = 'INSERT INTO adsl (' . join(',',@c) . ') values (' . join(',', map { '?' } 0 .. $#c) . ')';
+
+       my @c = keys %$h;
+
+       my $sql = "INSERT INTO $table (" . join(',',@c) . ') values (' . join(',', map { '?' } 0 .. $#c) . ')';
        warn $sql;
-       my $sth = $dbh->prepare($sql);
-       $sth->execute( map { $workload->{$_} } @c );
+       my $sth = $self->dbh->prepare($sql);
+       $sth->execute( map { $h->{$_} } @c );
+}
+
+sub ADSL : Job : MinProcesses(1) : MaxProcesses(5) : Decode(d_json) {
+       my ( $self, $job, $workload ) = @_;
+
+       my $h = $workload->{ADSL} || die "no ADSL in ",dump $workload;
+       foreach my $c ( qw(ip username) ) {
+               $h->{$c} = $workload->{$c} || die "no $c in ",dump $workload;
+       }
+
+       warn "# ADSL ", dump $h;
+
+       $self->pg_insert(adsl => $h)
+}
+
+sub ping : Job : MinProcesses(1) : MaxProcesses(5) : Decode(d_json) {
+       my ( $self, $job, $workload ) = @_;
+
+       $self->pg_insert(ping => $workload);
+}
+
+sub sql : Job : MinProcesses(1) : MaxProcesses(5) : Encode(e_json) {
+       my ( $self, $job, $workload ) = @_;
+
+       my $sth = $self->dbh->prepare($workload);
+       my $rows = $sth->execute;
+
+       warn "# $rows rows get_username_table $workload\n";
+
+       return {
+               columns => $sth->{NAME},
+               rows => $sth->fetchall_arrayref,
+       };
 }
 
 1;