working free ports after reboot but bug: row expansion

This commit is contained in:
Oliver Gorwits
2019-08-19 23:25:06 +01:00
parent 4c1d5d672d
commit 22302114cb
3 changed files with 37 additions and 12 deletions

View File

@@ -17,11 +17,28 @@ __PACKAGE__->result_source_instance->view_definition(<<ENDSQL
ELSE 0 END) as ports_in_use, ELSE 0 END) as ports_in_use,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin != 'up') THEN 1 sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin != 'up') THEN 1
ELSE 0 END) as ports_shutdown, ELSE 0 END) as ports_shutdown,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up != 'up' sum(CASE
AND ( age(now(), to_timestamp(extract(epoch from d.last_discover) - (d.uptime - dp.lastchange)/100)) > ?::interval )) THEN 1 WHEN ( dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up != 'up'
ELSE 0 END) as ports_free AND (age(now(), to_timestamp(extract(epoch from d.last_discover) - (d.uptime/100))) < ?::interval)
FROM device d LEFT JOIN device_port dp AND (last_node.time_last IS NULL OR (age(now(), last_node.time_last)) > ?::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 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 GROUP BY d.dns, d.ip
ORDER BY d.dns, d.ip ORDER BY d.dns, d.ip
ENDSQL ENDSQL

View File

@@ -96,14 +96,22 @@ sub only_free_ports {
->search_rs($cond, $attrs) ->search_rs($cond, $attrs)
->search( ->search(
{ {
'me.up' => { '!=' => 'up' }, 'me.up_admin' => 'up',
},{ 'me.up' => { '!=' => 'up' },
where => 'me.type' => { '!=' => 'propVirtual' },
\["age(now(), to_timestamp(extract(epoch from device.last_discover) " -or => [
."- (device.uptime - me.lastchange)/100)) " -and => [
."> ?::interval", \["age(now(), to_timestamp(extract(epoch from device.last_discover) - (device.uptime/100))) < ?::interval",
[{} => $interval]],
-or => [
'last_node.time_last' => undef,
\["age(now(), last_node.time_last) > ?::interval", [{} => $interval]],
]
],
\["age(now(), to_timestamp(extract(epoch from device.last_discover) - (device.uptime - me.lastchange)/100)) > ?::interval",
[{} => $interval]], [{} => $interval]],
join => 'device' }, ],
},{ join => [qw/device last_node/] },
); );
} }

View File

@@ -20,7 +20,7 @@ get '/ajax/content/report/portutilization' => require_login sub {
my $age_num = param('age_num') || 3; my $age_num = param('age_num') || 3;
my $age_unit = param('age_unit') || 'months'; my $age_unit = param('age_unit') || 'months';
my @results = schema('netdisco')->resultset('Virtual::PortUtilization') my @results = schema('netdisco')->resultset('Virtual::PortUtilization')
->search(undef, { bind => [ "$age_num $age_unit" ] })->hri->all; ->search(undef, { bind => [ "$age_num $age_unit", "$age_num $age_unit", "$age_num $age_unit" ] })->hri->all;
if (request->is_ajax) { if (request->is_ajax) {
my $json = to_json (\@results); my $json = to_json (\@results);