@@ -11,7 +11,7 @@ __PACKAGE__->load_namespaces(
|
||||
);
|
||||
|
||||
our # try to hide from kwalitee
|
||||
$VERSION = 81; # schema version used for upgrades, keep as integer
|
||||
$VERSION = 83; # schema version used for upgrades, keep as integer
|
||||
|
||||
use Path::Class;
|
||||
use File::ShareDir 'dist_dir';
|
||||
|
||||
@@ -46,6 +46,8 @@ __PACKAGE__->add_columns(
|
||||
{ data_type => "boolean", is_nullable => 1 },
|
||||
"device_key",
|
||||
{ data_type => "text", is_nullable => 1 },
|
||||
"backend",
|
||||
{ data_type => "text", is_nullable => 1 },
|
||||
);
|
||||
|
||||
|
||||
|
||||
@@ -371,7 +371,6 @@ sub renumber {
|
||||
|
||||
$schema->resultset('Admin')->search({
|
||||
device => $old_ip,
|
||||
status => { '-not_like' => 'queued-%' },
|
||||
})->delete;
|
||||
|
||||
$device->update({
|
||||
|
||||
@@ -24,7 +24,7 @@ __PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
||||
WHERE action IN ( 'discover', 'macsuck', 'arpnip', 'nbtstat' )
|
||||
GROUP BY action, entered
|
||||
HAVING count( device ) > 1
|
||||
AND SUM( CASE WHEN status LIKE 'queued%' THEN 1 ELSE 0 END ) = 0
|
||||
AND SUM( CASE WHEN status = 'queued' THEN 1 ELSE 0 END ) = 0
|
||||
ORDER BY entered DESC, elapsed DESC
|
||||
LIMIT 30
|
||||
ENDSQL
|
||||
|
||||
@@ -16,6 +16,7 @@ __PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
||||
ON (ds.backend = ? AND admin.device = ds.device
|
||||
AND admin.action = ANY (ds.actionset))
|
||||
WHERE admin.status = 'queued'
|
||||
AND admin.backend IS NULL
|
||||
AND ds.device IS NULL)
|
||||
|
||||
SELECT my_jobs.*,
|
||||
|
||||
@@ -15,6 +15,7 @@ __PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
||||
|
||||
LEFT OUTER JOIN admin ON (device.ip = admin.device
|
||||
AND admin.status = 'queued'
|
||||
AND admin.backend IS NULL
|
||||
AND admin.action = ?)
|
||||
|
||||
FULL OUTER JOIN device_skip ON (device_skip.device = device.ip
|
||||
|
||||
@@ -730,7 +730,6 @@ sub delete {
|
||||
|
||||
$schema->resultset('Admin')->search({
|
||||
device => { '-in' => $devices->as_query },
|
||||
status => { '-not_like' => 'queued-%' },
|
||||
})->delete;
|
||||
|
||||
$schema->resultset('DeviceSkip')->search(
|
||||
|
||||
@@ -112,7 +112,8 @@ sub jq_getsome {
|
||||
job => $job->id,
|
||||
-exists => $jobs->search({
|
||||
job => { '>' => $job->id },
|
||||
status => { -like => 'queued-%' },
|
||||
status => 'queued',
|
||||
backend => { '!=' => undef },
|
||||
started => \[q/> (LOCALTIMESTAMP - ?::interval)/, setting('jobs_stale_after')],
|
||||
%job_properties,
|
||||
})->as_query,
|
||||
@@ -131,7 +132,8 @@ sub jq_getsome {
|
||||
sub jq_locked {
|
||||
my @returned = ();
|
||||
my $rs = schema(vars->{'tenant'})->resultset('Admin')->search({
|
||||
status => ('queued-'. setting('workers')->{'BACKEND'}),
|
||||
status => 'queued',
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
started => \[q/> (LOCALTIMESTAMP - ?::interval)/, setting('jobs_stale_after')],
|
||||
});
|
||||
|
||||
@@ -147,7 +149,7 @@ sub jq_queued {
|
||||
return schema(vars->{'tenant'})->resultset('Admin')->search({
|
||||
device => { '!=' => undef},
|
||||
action => $job_type,
|
||||
status => { -like => 'queued%' },
|
||||
status => 'queued',
|
||||
})->get_column('device')->all;
|
||||
}
|
||||
|
||||
@@ -161,7 +163,8 @@ sub jq_lock {
|
||||
my $updated = schema(vars->{'tenant'})->resultset('Admin')
|
||||
->search({ job => $job->id, status => 'queued' }, { for => 'update' })
|
||||
->update({
|
||||
status => ('queued-'. setting('workers')->{'BACKEND'}),
|
||||
status => 'queued',
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
started => \"LOCALTIMESTAMP",
|
||||
});
|
||||
|
||||
@@ -205,7 +208,7 @@ sub jq_defer {
|
||||
# lock db row and update to show job is available
|
||||
schema(vars->{'tenant'})->resultset('Admin')
|
||||
->search({ job => $job->id }, { for => 'update' })
|
||||
->update({ status => 'queued', started => undef, log => $job->log });
|
||||
->update({ status => 'queued', backend => undef, started => undef, log => $job->log });
|
||||
});
|
||||
$happy = true;
|
||||
}
|
||||
@@ -257,12 +260,7 @@ sub jq_complete {
|
||||
|
||||
sub jq_log {
|
||||
return schema(vars->{'tenant'})->resultset('Admin')->search({
|
||||
(param('backend') ? (
|
||||
'me.status' => { '=' => [
|
||||
# FIXME 'done-'. param('backend'),
|
||||
'queued-'. param('backend'),
|
||||
] },
|
||||
) : ()),
|
||||
(param('backend') ? ('me.backend' => param('backend')) : ()),
|
||||
(param('action') ? ('me.action' => param('action')) : ()),
|
||||
(param('device') ? (
|
||||
-or => [
|
||||
@@ -271,7 +269,16 @@ sub jq_log {
|
||||
],
|
||||
) : ()),
|
||||
(param('username') ? ('me.username' => param('username')) : ()),
|
||||
(param('status') ? ('me.status' => lc(param('status'))) : ()),
|
||||
(param('status') ? (
|
||||
(param('status') eq 'Running') ? (
|
||||
-and => [
|
||||
{ 'me.backend' => { '!=' => undef } },
|
||||
{ 'me.status' => 'queued' },
|
||||
],
|
||||
) : (
|
||||
'me.status' => lc(param('status'))
|
||||
)
|
||||
) : ()),
|
||||
(param('duration') ? (
|
||||
-bool => [
|
||||
-or => [
|
||||
|
||||
@@ -32,10 +32,14 @@ ajax '/ajax/content/admin/jobqueue' => require_role admin => sub {
|
||||
content_type('text/html');
|
||||
|
||||
my $jq_total = schema(vars->{'tenant'})->resultset('Admin')->count();
|
||||
my $jq_queued = schema(vars->{'tenant'})->resultset('Admin')->search({status => 'queued'})->count();
|
||||
my $jq_running = schema(vars->{'tenant'})->resultset('Admin')->search({status => { -like => 'queued-%'}})->count();
|
||||
my $jq_done = schema(vars->{'tenant'})->resultset('Admin')->search({status => 'done'})->count();
|
||||
my $jq_errored = schema(vars->{'tenant'})->resultset('Admin')->search({status => 'error'})->count();
|
||||
my $jq_queued = schema(vars->{'tenant'})->resultset('Admin')
|
||||
->search({status => 'queued', backend => undef })->count();
|
||||
my $jq_running = schema(vars->{'tenant'})->resultset('Admin')
|
||||
->search({status => 'queued', backend => { '!=' => undef }})->count();
|
||||
my $jq_done = schema(vars->{'tenant'})->resultset('Admin')
|
||||
->search({status => 'done'})->count();
|
||||
my $jq_errored = schema(vars->{'tenant'})->resultset('Admin')
|
||||
->search({status => 'error'})->count();
|
||||
|
||||
template 'ajax/admintask/jobqueue.tt', {
|
||||
jq_total => commify($jq_total || 0),
|
||||
|
||||
@@ -87,10 +87,7 @@ ajax '/ajax/data/queue/typeahead/status' => require_role admin => sub {
|
||||
my $q = quotemeta( param('query') || param('term') || param('status') );
|
||||
my @actions =
|
||||
grep { $q ? m/^$q/ : true }
|
||||
List::MoreUtils::uniq
|
||||
sort
|
||||
grep { defined }
|
||||
qw(Queued Done Info Deferred Error);
|
||||
qw(Queued Running Done Info Deferred Error);
|
||||
|
||||
content_type 'application/json';
|
||||
to_json \@actions;
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE admin ADD COLUMN "backend" text;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,7 @@
|
||||
BEGIN;
|
||||
|
||||
UPDATE admin SET backend = regexp_replace(status, '^queued-', '', '') WHERE status ~ '^queued-';
|
||||
|
||||
UPDATE admin SET status = 'queued' WHERE status ~ '^queued-';
|
||||
|
||||
COMMIT;
|
||||
@@ -26,14 +26,10 @@
|
||||
<tr
|
||||
[% ' class="nd_jobqueueitem success"' IF row.status == 'done' %]
|
||||
[% ' class="nd_jobqueueitem error"' IF row.status == 'error' %]
|
||||
[% ' class="nd_jobqueueitem info"' IF row.status.search('^queued-') %]
|
||||
[% ' class="nd_jobqueueitem info"' IF (row.status == 'queued' AND row.backend != '') %]
|
||||
data-content="[% row.log | html_entity %]"
|
||||
>
|
||||
[% IF row.status.search('^queued-') %]
|
||||
<td class="nd_center-cell">[% row.status.remove('^queued-') | html_entity %]</td>
|
||||
[% ELSE %]
|
||||
<td class="nd_center-cell"></td>
|
||||
[% END %]
|
||||
<td class="nd_center-cell">[% row.backend | html_entity %]</td>
|
||||
|
||||
<td class="nd_center-cell">
|
||||
[% FOREACH word IN row.action.split('_') %]
|
||||
@@ -51,7 +47,7 @@
|
||||
|
||||
<td class="nd_center-cell">[% row.username | html_entity %]</td>
|
||||
|
||||
[% IF row.status.search('^queued-') %]
|
||||
[% IF (row.status == 'queued' AND row.backend != '') %]
|
||||
<td class="nd_center-cell">Running</td>
|
||||
[% ELSE %]
|
||||
<td class="nd_center-cell">[% row.status.ucfirst | html_entity %]</td>
|
||||
|
||||
Reference in New Issue
Block a user