package App::Netdisco::DB::Result::Virtual::PortUtilization; use strict; use warnings; use base 'DBIx::Class::Core'; __PACKAGE__->table_class('DBIx::Class::ResultSource::View'); __PACKAGE__->table('port_utilization'); __PACKAGE__->result_source_instance->is_virtual(1); __PACKAGE__->result_source_instance->view_definition(< ?::interval) ) THEN 1 WHEN ( dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up != 'up' AND (last_node.time_last IS NULL OR (age(now(), to_timestamp(extract(epoch from d.last_discover) - (d.uptime - dp.lastchange)/100)) > ?::interval)) ) THEN 1 ELSE 0 END) as ports_free FROM device d LEFT JOIN device_port dp ON d.ip = dp.ip LEFT JOIN node last_node ON last_node.mac = ( SELECT lastnodesub.mac FROM node lastnodesub WHERE port = dp.port AND switch = dp.ip ORDER BY time_last DESC LIMIT '1' ) GROUP BY d.dns, d.ip ORDER BY d.dns, d.ip ENDSQL ); __PACKAGE__->add_columns( 'dns' => { data_type => 'text', }, 'ip' => { data_type => 'inet', }, 'port_count' => { data_type => 'integer', }, 'ports_in_use' => { data_type => 'integer', }, 'ports_shutdown' => { data_type => 'integer', }, 'ports_free' => { data_type => 'integer', }, ); 1;