Duplex Mismatch Finder
<& SELF:results &>
<%args>
$search => undef
%args>
<%method title>
- Duplex Mismatch Finder \
%method>
<%shared>
my $results = undef;
%shared>
<%init>
if (defined $search and $search =~ /duplex/i){
$results = sql_rows('device_port d, device_port t',
['d.ip','d.port','d.duplex','t.ip as remote_ip','t.port as remote_port','t.duplex as remote_duplex'],
{'d.remote_ip' => \'t.ip', 'd.remote_port' => \'t.port', 'd.duplex' => \'!t.duplex'}
);
$results = 'none' unless (defined $results and scalar (@$results));
}
%init>
<%method results>
% return unless defined $results;
% if ($results eq 'none'){
No Duplex Mismatches found.
% return;}
Device / Port |
Duplex |
Device / Port (remote) |
Duplex (remote) |
|
<%perl>
my %seen; my $count;
my $domain = $netdisco::CONFIG{domain};
foreach my $result (@$results){
my $ip = $result->{ip};
my $port = $result->{port};
my $duplex = $result->{duplex};
my $remote_ip = $result->{remote_ip};
my $remote_port = $result->{remote_port};
my $remote_duplex = $result->{remote_duplex};
next if defined $seen{$ip}->{$port};
my $dns = sql_scalar('device',['dns'],{'ip' => $ip});
my $remote_dns = sql_scalar('device',['dns'],{'ip' => $remote_ip});
my $name = defined $dns ? $dns : $ip;
$name =~ s/\Q$domain\E//;
my $remote_name = defined $remote_dns ? $remote_dns : $remote_ip;
$remote_name =~ s/\Q$domain\E//;
$count++;
%perl>
<%$name%> (<%$port%>) |
<%$duplex%> |
<%$remote_name%> (<%$remote_port%>) |
<%$remote_duplex%> |
<%perl>
$seen{$ip}->{$port}++;
$seen{$remote_ip}->{$remote_port}++;
}
%perl>
Found <% $count %> Mismatch<% $count > 1 ? 'es' : ''%>
%method>
%# $Id: duplex.html,v 1.5 2007/12/14 02:18:22 maxbaker Exp $
%# vim:syntax=mason