diff --git a/Netdisco/lib/App/Netdisco/Daemon/JobQueue/PostgreSQL.pm b/Netdisco/lib/App/Netdisco/Daemon/JobQueue/PostgreSQL.pm new file mode 100644 index 00000000..9816a01d --- /dev/null +++ b/Netdisco/lib/App/Netdisco/Daemon/JobQueue/PostgreSQL.pm @@ -0,0 +1,21 @@ +package App::Netdisco::Daemon::JobQueue::PostgreSQL; + +use Dancer qw/:moose :syntax :script/; +use Dancer::Plugin::DBIC 'schema'; + +use Role::Tiny; +use namespace::clean; + +sub jobqueue_insert { + my ($self, $settings) = @_; + + schema('netdisco')->resultset('Admin')->create({ + action => $settings->{action}, + device => $settings->{device}, + port => $settings->{port}, + subaction => $settings->{extra}, + status => 'queued', + }); +} + +true; diff --git a/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm b/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm index 7dbfc2e8..14c7e5f9 100644 --- a/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm +++ b/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm @@ -1,7 +1,6 @@ package App::Netdisco::Daemon::Worker::Scheduler; use Dancer qw/:moose :syntax :script/; -use Dancer::Plugin::DBIC 'schema'; use Algorithm::Cron; use Try::Tiny; @@ -9,6 +8,8 @@ use Try::Tiny; use Role::Tiny; use namespace::clean; +with 'App::Netdisco::Daemon::JobQueue::'. setting('job_queue'); + sub worker_begin { my $self = shift; my $wid = $self->wid; @@ -55,11 +56,10 @@ sub worker_body { # queue it! try { info "sched ($wid): queueing $action job"; - schema('netdisco')->resultset('Admin')->create({ + $self->jobqueue_insert({ action => $action, - device => ($sched->{device} || undef), - subaction => ($sched->{extra} || undef), - status => 'queued', + device => $sched->{device}, + extra => $sched->{extra}, }); } catch { diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index 83e5d64e..ea9d51b3 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -208,6 +208,8 @@ job_type_keys: Poller: pollers Interactive: interactives +job_queue: PostgreSQL + # --------------- # DANCER INTERNAL # ---------------