#!/usr/bin/perl
use strict;
use lib "$ENV{HOME}/hack/Data-ObjectDriver/lib";
use lib "$ENV{HOME}/hack/TheSchwartz/lib";
use lib "$ENV{HOME}/hack/gearman/api/perl/Gearman/lib";
use lib "$ENV{HOME}/cvs/Data-ObjectDriver/lib";
use lib "$ENV{HOME}/cvs/TheSchwartz/lib";
use lib "$ENV{HOME}/cvs/gearman/api/perl/Gearman/lib";
use Gearman::Worker;
use TheSchwartz;
use JSON::Any;
my $j = JSON::Any->new;
my $ts = TheSchwartz->new(
databases => [
{ dsn => "dbi:mysql:database=t_sch_unnamed",
user => "root",
pass => "",
}
]
);
# FIXME: use embedded gearman server, and workers be child processes
my $worker = Gearman::Worker->new;
$worker->job_servers('127.0.0.1:7003');
$worker->register_function( "insert_job" => handler( \&insert_job ) );
$worker->work while 1;
############################################################################
sub handler {
my ($code) = @_;
return sub {
my $job = shift;
my $arg = $job->arg;
my $jreq = eval { $j->jsonToObj( $job->arg ) };
unless ($jreq) {
die "not a valid JSON request";
}
return $code->( $job, $jreq );
};
}
sub insert_job {
my ( $job, $json ) = @_;
my $funcname = $json->{funcname} or die "No funcname";
my $job = TheSchwartz::Job->new(
funcname => $json->{funcname},
arg => $json->{arg},
uniqkey => $json->{uniqkey},
coalesce => $json->{coalesce},
);
my $h = $ts->insert($job)
or die "insert_failure\n";
return $h->as_string;
}