fixed only free ports in device ports view (showing free ports TODO)
This commit is contained in:
@@ -250,24 +250,13 @@ The JOIN is of type "LEFT" in case there isn't any such node.
|
|||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
__PACKAGE__->belongs_to( last_node => 'App::Netdisco::DB::Result::Node',
|
__PACKAGE__->belongs_to(
|
||||||
sub {
|
last_node => 'App::Netdisco::DB::Result::Virtual::LastNode', {
|
||||||
my $args = shift;
|
'foreign.switch' => 'self.ip',
|
||||||
return {
|
'foreign.port' => 'self.port',
|
||||||
"$args->{foreign_alias}.mac" => { '=' =>
|
}, {
|
||||||
$args->{self_resultsource}->schema->resultset('Node')->search({
|
join_type => 'LEFT',
|
||||||
switch => { -ident => "$args->{self_alias}.ip"},
|
}
|
||||||
port => { -ident => "$args->{self_alias}.port"}
|
|
||||||
},{
|
|
||||||
rows => 1,
|
|
||||||
order_by => { -desc => ['time_last'] },
|
|
||||||
columns => 'mac',
|
|
||||||
alias => 'lastnodesub'
|
|
||||||
})->as_query
|
|
||||||
}
|
|
||||||
};
|
|
||||||
},
|
|
||||||
{ join_type => 'LEFT' },
|
|
||||||
);
|
);
|
||||||
|
|
||||||
=head2 vlans
|
=head2 vlans
|
||||||
|
|||||||
54
lib/App/Netdisco/DB/Result/Virtual/LastNode.pm
Normal file
54
lib/App/Netdisco/DB/Result/Virtual/LastNode.pm
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
package App::Netdisco::DB::Result::Virtual::LastNode;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use base 'DBIx::Class::Core';
|
||||||
|
|
||||||
|
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
|
||||||
|
|
||||||
|
__PACKAGE__->table('last_node');
|
||||||
|
__PACKAGE__->result_source_instance->is_virtual(1);
|
||||||
|
__PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
||||||
|
SELECT DISTINCT ON (switch, port) * FROM node
|
||||||
|
ORDER BY switch, port, time_last desc
|
||||||
|
ENDSQL
|
||||||
|
);
|
||||||
|
|
||||||
|
__PACKAGE__->add_columns(
|
||||||
|
"mac",
|
||||||
|
{ data_type => "macaddr", is_nullable => 0 },
|
||||||
|
"switch",
|
||||||
|
{ data_type => "inet", is_nullable => 0 },
|
||||||
|
"port",
|
||||||
|
{ data_type => "text", is_nullable => 0 },
|
||||||
|
"active",
|
||||||
|
{ data_type => "boolean", is_nullable => 1 },
|
||||||
|
"oui",
|
||||||
|
{ data_type => "varchar", is_nullable => 1, size => 8 },
|
||||||
|
"time_first",
|
||||||
|
{
|
||||||
|
data_type => "timestamp",
|
||||||
|
default_value => \"current_timestamp",
|
||||||
|
is_nullable => 1,
|
||||||
|
original => { default_value => \"now()" },
|
||||||
|
},
|
||||||
|
"time_recent",
|
||||||
|
{
|
||||||
|
data_type => "timestamp",
|
||||||
|
default_value => \"current_timestamp",
|
||||||
|
is_nullable => 1,
|
||||||
|
original => { default_value => \"now()" },
|
||||||
|
},
|
||||||
|
"time_last",
|
||||||
|
{
|
||||||
|
data_type => "timestamp",
|
||||||
|
default_value => \"current_timestamp",
|
||||||
|
is_nullable => 1,
|
||||||
|
original => { default_value => \"now()" },
|
||||||
|
},
|
||||||
|
"vlan",
|
||||||
|
{ data_type => "text", is_nullable => 0, default_value => '0' },
|
||||||
|
);
|
||||||
|
|
||||||
|
1;
|
||||||
@@ -23,22 +23,17 @@ __PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
|||||||
AND (last_node.time_last IS NULL OR (age(now(), last_node.time_last)) > ?::interval) )
|
AND (last_node.time_last IS NULL OR (age(now(), last_node.time_last)) > ?::interval) )
|
||||||
THEN 1
|
THEN 1
|
||||||
WHEN ( dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up != 'up'
|
WHEN ( dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up != 'up'
|
||||||
AND (last_node.time_last IS NULL OR
|
AND (age(now(), to_timestamp(extract(epoch from d.last_discover) - (d.uptime - dp.lastchange)/100)) > ?::interval) )
|
||||||
(age(now(), to_timestamp(extract(epoch from d.last_discover) - (d.uptime - dp.lastchange)/100)) > ?::interval)) )
|
|
||||||
THEN 1
|
THEN 1
|
||||||
ELSE 0
|
ELSE 0
|
||||||
END) as ports_free
|
END) as ports_free
|
||||||
FROM device d
|
FROM device d
|
||||||
LEFT JOIN device_port dp
|
LEFT JOIN device_port dp
|
||||||
ON d.ip = dp.ip
|
ON d.ip = dp.ip
|
||||||
LEFT JOIN node last_node
|
LEFT JOIN
|
||||||
ON last_node.mac = (
|
( SELECT DISTINCT ON (switch, port) * FROM node
|
||||||
SELECT lastnodesub.mac
|
ORDER BY switch, port, time_last desc ) AS last_node
|
||||||
FROM node lastnodesub
|
ON dp.port = last_node.port AND dp.ip = last_node.switch
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user