diff options
author | franck cuny <franck@lumberjaph.net> | 2010-04-13 18:46:54 +0200 |
---|---|---|
committer | franck cuny <franck@lumberjaph.net> | 2010-04-13 18:46:54 +0200 |
commit | d18213e3c6956540e21d738b411b00e9eb71dc4e (patch) | |
tree | 784913af63e25499c89033682b2caccfc2d000dd /lib/presque | |
parent | initial commit (diff) | |
download | presque-d18213e3c6956540e21d738b411b00e9eb71dc4e.tar.gz |
basic REST job queue using tatsumaki + redis
Diffstat (limited to 'lib/presque')
-rw-r--r-- | lib/presque/Backend/Redis.pm | 0 | ||||
-rw-r--r-- | lib/presque/IndexHandler.pm | 14 | ||||
-rw-r--r-- | lib/presque/JobQueueHandler.pm | 13 | ||||
-rw-r--r-- | lib/presque/RestQueueHandler.pm | 81 |
4 files changed, 108 insertions, 0 deletions
diff --git a/lib/presque/Backend/Redis.pm b/lib/presque/Backend/Redis.pm new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/lib/presque/Backend/Redis.pm diff --git a/lib/presque/IndexHandler.pm b/lib/presque/IndexHandler.pm new file mode 100644 index 0000000..9a8e92e --- /dev/null +++ b/lib/presque/IndexHandler.pm @@ -0,0 +1,14 @@ +package presque::IndexHandler; + +use Moose; +extends 'Tatsumaki::Handler'; +__PACKAGE__->asynchronous(1); + +use JSON; + +sub get { + my $self = shift; + # render template +} + +1; diff --git a/lib/presque/JobQueueHandler.pm b/lib/presque/JobQueueHandler.pm new file mode 100644 index 0000000..1e6d9e5 --- /dev/null +++ b/lib/presque/JobQueueHandler.pm @@ -0,0 +1,13 @@ +package presque::JobQueueHandler; + +use Moose; +extends 'Tatsumaki::Handler'; +__PACKAGE__->asynchronous(1); + +use JSON; + +sub get { + my ($self, $queue_name) = @_; +} + +1; diff --git a/lib/presque/RestQueueHandler.pm b/lib/presque/RestQueueHandler.pm new file mode 100644 index 0000000..d953505 --- /dev/null +++ b/lib/presque/RestQueueHandler.pm @@ -0,0 +1,81 @@ +package presque::RestQueueHandler; + +use Moose; +extends 'Tatsumaki::Handler'; +__PACKAGE__->asynchronous(1); + +use JSON; +use YAML::Syck; + +sub get { + my ( $self, $queue_name ) = @_; + my $lkey = $queue_name . ':queue'; + $self->application->redis->lpop( + $lkey, + sub { + my $value = shift; + my $qpkey = $queue_name . ':queupolicy'; + if ($value) { + my $val = $self->application->redis->get( + $value, + sub { + $self->finish(shift); + } + ); + }else{ + $self->finish(JSON::encode_json({error => "no job"})); + } + } + ); +} + +sub post { + my ( $self, $queue_name ) = @_; + + my $p = $self->request->content; + + $self->application->redis->incr( + $queue_name . ':UUID', + sub { + my $uuid = shift; + my $key = $queue_name . ':' . $uuid; + + $self->application->redis->set( + $key, $p, + sub { + my $status_set = shift; + my $lkey = $queue_name . ':queue'; + if ($uuid == 1) { + $self->application->redis->sadd( + 'QUEUESET', + $lkey, + sub { + my $ckey = 'queuestat:' . $queue_name; + $self->application->redis->set( $ckey, 1 ); + $self->_finish_post($lkey, $key, $status_set); + } + ); + }else{ + $self->_finish_post($lkey, $key, $status_set); + } + } + ); + } + ); +} + +sub _finish_post { + my ($self, $lkey, $key, $result) = @_; + $self->application->redis->rpush( + $lkey, $key, + sub { + $self->finish($result); + } + ); +} + +sub delete { + my ($self, $queue_name) = @_; +} + +1; |