#!/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; }