diff --git a/lib/App/Netdisco/DB/Result/Virtual/PortUtilization.pm b/lib/App/Netdisco/DB/Result/Virtual/PortUtilization.pm index a51e6ccc..5a0343c0 100644 --- a/lib/App/Netdisco/DB/Result/Virtual/PortUtilization.pm +++ b/lib/App/Netdisco/DB/Result/Virtual/PortUtilization.pm @@ -12,18 +12,22 @@ __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' + WHEN ( (dp.type IS NULL OR dp.type !~* '^(53|ieee8023adLag|propVirtual|l2vlan|l3ipvlan|135|136|137)\$') + AND dp.up_admin = 'up' AND dp.up != 'up' AND (age(now(), to_timestamp(extract(epoch from d.last_discover) - (d.uptime - dp.lastchange)/100)) > ?::interval) ) THEN 1 ELSE 0 diff --git a/lib/App/Netdisco/DB/ResultSet/Device.pm b/lib/App/Netdisco/DB/ResultSet/Device.pm index 2216e6f5..0afbc80e 100644 --- a/lib/App/Netdisco/DB/ResultSet/Device.pm +++ b/lib/App/Netdisco/DB/ResultSet/Device.pm @@ -670,7 +670,10 @@ sub with_port_count { ->search( { 'dp.ip' => { -ident => 'me.ip' }, - 'dp.type' => { '!=' => 'propVirtual' }, + 'dp.type' => [ '-or' => + { '=' => undef }, + { '!~*' => '^(53|ieee8023adLag|propVirtual|l2vlan|l3ipvlan|135|136|137)$' }, + ], }, { alias => 'dp' } )->count_rs->as_query, diff --git a/lib/App/Netdisco/DB/ResultSet/DevicePort.pm b/lib/App/Netdisco/DB/ResultSet/DevicePort.pm index f4319d3a..8dcfbfee 100644 --- a/lib/App/Netdisco/DB/ResultSet/DevicePort.pm +++ b/lib/App/Netdisco/DB/ResultSet/DevicePort.pm @@ -68,7 +68,8 @@ sub with_is_free { { '+columns' => { is_free => # NOTE this query is in `git grep 'THREE PLACES'` - \["me.up_admin = 'up' AND me.up != 'up' AND me.type != 'propVirtual' AND " + \["me.up_admin = 'up' AND me.up != 'up' AND " + ."(me.type IS NULL OR me.type !~* '^(53|ieee8023adLag|propVirtual|l2vlan|l3ipvlan|135|136|137)\$') AND " ."((age(now(), to_timestamp(extract(epoch from device.last_discover) - (device.uptime/100))) < ?::interval " ."AND (last_node.time_last IS NULL OR age(now(), last_node.time_last) > ?::interval)) " ."OR age(now(), to_timestamp(extract(epoch from device.last_discover) - (device.uptime - me.lastchange)/100)) > ?::interval)", @@ -100,7 +101,10 @@ sub only_free_ports { # NOTE this query is in `git grep 'THREE PLACES'` 'me.up_admin' => 'up', 'me.up' => { '!=' => 'up' }, - 'me.type' => { '!=' => 'propVirtual' }, + 'me.type' => [ '-or' => + { '=' => undef }, + { '!~*' => '^(53|ieee8023adLag|propVirtual|l2vlan|l3ipvlan|135|136|137)$' }, + ], -or => [ -and => [ \["age(now(), to_timestamp(extract(epoch from device.last_discover) - (device.uptime/100))) < ?::interval",