1package App::Netdisco::DB::Result::Virtual::SlowDevices; 2 3use strict; 4use warnings; 5 6use base 'DBIx::Class::Core'; 7 8__PACKAGE__->table_class('DBIx::Class::ResultSource::View'); 9 10__PACKAGE__->table('slow_devices'); 11__PACKAGE__->result_source_instance->is_virtual(1); 12__PACKAGE__->result_source_instance->view_definition(<<ENDSQL 13 SELECT a.action, a.device, a.started, a.finished, 14 justify_interval(extract(epoch FROM (a.finished - a.started)) * interval '1 second') AS elapsed 15 FROM admin a 16 INNER JOIN ( 17 SELECT device, action, max(started) AS started 18 FROM admin 19 WHERE status = 'done' 20 AND action IN ('discover','macsuck','arpnip') 21 GROUP BY action, device 22 ) b 23 ON a.device = b.device AND a.started = b.started 24 ORDER BY elapsed desc, action, device 25 LIMIT 20 26ENDSQL 27); 28 29__PACKAGE__->add_columns( 30 "action", 31 { data_type => "text", is_nullable => 1 }, 32 "device", 33 { data_type => "inet", is_nullable => 1 }, 34 "started", 35 { data_type => "timestamp", is_nullable => 1 }, 36 "finished", 37 { data_type => "timestamp", is_nullable => 1 }, 38 "elapsed", 39 { data_type => "interval", is_nullable => 1 }, 40); 41 421; 43