43 lines
1.1 KiB
Perl
43 lines
1.1 KiB
Perl
package App::Netdisco::DB::Result::Virtual::SlowDevices;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use base 'DBIx::Class::Core';
|
|
|
|
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
|
|
|
|
__PACKAGE__->table('slow_devices');
|
|
__PACKAGE__->result_source_instance->is_virtual(1);
|
|
__PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
|
SELECT a.action, a.device, a.started, a.finished,
|
|
justify_interval(extract(epoch FROM (a.finished - a.started)) * interval '1 second') AS elapsed
|
|
FROM admin a
|
|
INNER JOIN (
|
|
SELECT device, action, max(started) AS started
|
|
FROM admin
|
|
WHERE status = 'done'
|
|
AND action IN ('discover','macsuck','arpnip')
|
|
GROUP BY action, device
|
|
) b
|
|
ON a.device = b.device AND a.started = b.started
|
|
ORDER BY elapsed desc, action, device
|
|
LIMIT 20
|
|
ENDSQL
|
|
);
|
|
|
|
__PACKAGE__->add_columns(
|
|
"action",
|
|
{ data_type => "text", is_nullable => 1 },
|
|
"device",
|
|
{ data_type => "inet", is_nullable => 1 },
|
|
"started",
|
|
{ data_type => "timestamp", is_nullable => 1 },
|
|
"finished",
|
|
{ data_type => "timestamp", is_nullable => 1 },
|
|
"elapsed",
|
|
{ data_type => "interval", is_nullable => 1 },
|
|
);
|
|
|
|
1;
|