show port error disable state in device ports view

This commit is contained in:
Oliver Gorwits
2018-02-22 07:27:11 +00:00
parent 5584865052
commit b69ad22a52
5 changed files with 42 additions and 5 deletions

View File

@@ -175,8 +175,7 @@ device port.
__PACKAGE__->might_have( properties => 'App::Netdisco::DB::Result::DevicePortProperties', { __PACKAGE__->might_have( properties => 'App::Netdisco::DB::Result::DevicePortProperties', {
'foreign.ip' => 'self.ip', 'foreign.port' => 'self.port', 'foreign.ip' => 'self.ip', 'foreign.port' => 'self.port',
}, { join_type => 'LEFT OUTER' } });
);
=head2 ssid =head2 ssid
@@ -308,6 +307,15 @@ ID assigned to untagged frames received on the port).
sub native { return (shift)->vlan } sub native { return (shift)->vlan }
=head2 error_disable_cause
Returns the textual reason given by the device if the port is in an error
state, or else `undef` if the port is not in an error state.
=cut
sub error_disable_cause { return (shift)->get_column('properties_error_disable_cause') }
=head2 vlan_count =head2 vlan_count
Returns the number of VLANs active on this device port. Enable this column by Returns the number of VLANs active on this device port. Enable this column by

View File

@@ -104,6 +104,32 @@ sub only_free_ports {
); );
} }
=head2 with_properties
This is a modifier for any C<search()> which
will add the following additional synthesized columns to the result set:
=over 4
=item error_disable_cause
=back
=cut
sub with_properties {
my ($rs, $cond, $attrs) = @_;
return $rs
->search_rs($cond, $attrs)
->search({},
{
'+select' => ['properties.error_disable_cause'],
'+as' => ['properties_error_disable_cause'],
join => 'properties',
});
}
=head2 with_vlan_count =head2 with_vlan_count
This is a modifier for any C<search()> (including the helpers below) which This is a modifier for any C<search()> (including the helpers below) which

View File

@@ -18,7 +18,7 @@ get '/ajax/content/device/ports' => require_login sub {
my $device = schema('netdisco')->resultset('Device') my $device = schema('netdisco')->resultset('Device')
->search_for_device($q) or send_error('Bad device', 400); ->search_for_device($q) or send_error('Bad device', 400);
my $set = $device->ports; my $set = $device->ports->with_properties;
# refine by ports if requested # refine by ports if requested
my $f = param('f'); my $f = param('f');

View File

@@ -25,7 +25,9 @@
[% IF row.up_admin != 'up' %] [% IF row.up_admin != 'up' %]
<i class="icon-remove"></i> <i class="icon-remove"></i>
[% ELSIF row.up == 'up' AND row.stp == 'blocking' AND vlans.$portname.vlan_count < 2 %] [% ELSIF row.up == 'up' AND row.stp == 'blocking' AND vlans.$portname.vlan_count < 2 %]
<i class="icon-fullscreen text-info"></i> <i class="icon-ban-circle text-info"></i>
[% ELSIF row.error_disable_cause %]
<i class="icon-exclamation-sign text-error"></i>
[% ELSIF row.has_column_loaded('is_free') AND row.is_free %] [% ELSIF row.has_column_loaded('is_free') AND row.is_free %]
<i class="icon-arrow-down text-success"></i> <i class="icon-arrow-down text-success"></i>
[% ELSIF row.up_admin == 'up' AND (row.up != 'up' AND row.up != 'dormant') %] [% ELSIF row.up_admin == 'up' AND (row.up != 'up' AND row.up != 'dormant') %]

View File

@@ -36,7 +36,8 @@
<li><i class="icon-li icon-arrow-down text-error"></i>&nbsp; Link Down</li> <li><i class="icon-li icon-arrow-down text-error"></i>&nbsp; Link Down</li>
<li><i class="icon-li icon-arrow-down text-success"></i>&nbsp; Port Free</li> <li><i class="icon-li icon-arrow-down text-success"></i>&nbsp; Port Free</li>
<li><i class="icon-li icon-remove"></i>&nbsp; Admin Disabled</li> <li><i class="icon-li icon-remove"></i>&nbsp; Admin Disabled</li>
<li><i class="icon-li icon-fullscreen text-info"></i>&nbsp; Blocking</li> <li><i class="icon-li icon-exclamation-sign text-error"></i>&nbsp; Error Disabled</li>
<li><i class="icon-li icon-ban-circle text-info"></i>&nbsp; Blocking</li>
<li><i class="icon-li icon-link text-warning"></i>&nbsp; Manual Topology</li> <li><i class="icon-li icon-link text-warning"></i>&nbsp; Manual Topology</li>
<li><i class="icon-li icon-link"></i>&nbsp; Neighbor Device</li> <li><i class="icon-li icon-link"></i>&nbsp; Neighbor Device</li>
<li><i class="icon-li icon-unlink text-error"></i>&nbsp; Neighbor Inacessible</li> <li><i class="icon-li icon-unlink text-error"></i>&nbsp; Neighbor Inacessible</li>