better port search from titlebar, option for ethernet ports
This commit is contained in:
4
Changes
4
Changes
@@ -12,6 +12,10 @@
|
||||
* Scheduler config does not need to be uncommented
|
||||
* More efficient polling of the job queue
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Specific search from titlebar uses default sidebar settings
|
||||
|
||||
2.036011 - 2017-10-09
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
@@ -18,33 +18,48 @@ get '/ajax/content/search/port' => require_login sub {
|
||||
if ( $q =~ m/^\d+$/ ) {
|
||||
$rs
|
||||
= schema('netdisco')->resultset('DevicePort')
|
||||
->columns( [qw/ ip port name descr /] )->search(
|
||||
{ "port_vlans.vlan" => $q },
|
||||
{ '+columns' => [qw/ device.dns device.name port_vlans.vlan /],
|
||||
->columns( [qw/ ip port name up up_admin speed /] )->search({
|
||||
"port_vlans.vlan" => $q,
|
||||
( param('uplink') ? () : (-or => [
|
||||
{-not_bool => "me.is_uplink"},
|
||||
{"me.is_uplink" => undef},
|
||||
]) ),
|
||||
( param('ethernet') ? ("me.type" => 'ethernetCsmacd') : () ),
|
||||
},{ '+columns' => [qw/ device.dns device.name port_vlans.vlan /],
|
||||
join => [qw/ port_vlans device /]
|
||||
}
|
||||
);
|
||||
)->with_times;
|
||||
}
|
||||
else {
|
||||
my ( $likeval, $likeclause ) = sql_match($q);
|
||||
|
||||
$rs
|
||||
= schema('netdisco')->resultset('DevicePort')
|
||||
->columns( [qw/ ip port name descr /] )->search(
|
||||
{ -or => [
|
||||
->columns( [qw/ ip port name up up_admin speed /] )
|
||||
->search({
|
||||
-and => [
|
||||
-or => [
|
||||
{ "me.name" => ( param('partial') ? $likeclause : $q ) },
|
||||
( length $q == 17
|
||||
? { "me.mac" => $q }
|
||||
: \[ 'me.mac::text ILIKE ?', $likeval ]
|
||||
),
|
||||
( param('uplink') ? (
|
||||
{ "me.remote_id" => $likeclause },
|
||||
{ "me.remote_type" => $likeclause },
|
||||
) : () ),
|
||||
],
|
||||
( param('uplink') ? () : (-or => [
|
||||
{-not_bool => "me.is_uplink"},
|
||||
{"me.is_uplink" => undef},
|
||||
]) ),
|
||||
( param('ethernet') ? ("me.type" => 'ethernetCsmacd') : () ),
|
||||
]
|
||||
},
|
||||
{ '+columns' => [qw/ device.dns device.name port_vlans.vlan /],
|
||||
join => [qw/ port_vlans device /]
|
||||
}
|
||||
);
|
||||
)->with_times;
|
||||
}
|
||||
|
||||
my @results = $rs->hri->all;
|
||||
|
||||
@@ -15,24 +15,24 @@ hook 'before' => sub {
|
||||
{ name => 'deviceports', label => 'Device Ports', default => 'on' },
|
||||
]);
|
||||
|
||||
# view settings for port options
|
||||
var('port_options' => [
|
||||
{ name => 'ethernet', label => 'Ethernet Only', default => 'on' },
|
||||
]);
|
||||
|
||||
# view settings for device options
|
||||
var('device_options' => [
|
||||
{ name => 'matchall', label => 'Match All Options', default => 'on' },
|
||||
]);
|
||||
|
||||
return unless (request->path eq uri_for('/search')->path
|
||||
return unless param('firstsearch') and
|
||||
(request->path eq uri_for('/search')->path
|
||||
or index(request->path, uri_for('/ajax/content/search')->path) == 0);
|
||||
|
||||
foreach my $col (@{ var('node_options') }) {
|
||||
next unless $col->{default} eq 'on';
|
||||
params->{$col->{name}} = 'checked'
|
||||
if not param('tab') or param('tab') ne 'node';
|
||||
}
|
||||
|
||||
foreach my $col (@{ var('device_options') }) {
|
||||
next unless $col->{default} eq 'on';
|
||||
params->{$col->{name}} = 'checked'
|
||||
if not param('tab') or param('tab') ne 'device';
|
||||
foreach my $col (@{ var('node_options') },
|
||||
@{ var('port_options') },
|
||||
@{ var('device_options') }) {
|
||||
params->{$col->{name}} = 'checked' if $col->{default} eq 'on';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<table id="ps-data-table" class="table table-striped table-bordered" width="100%" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Status</th>
|
||||
<th>Name</th>
|
||||
<th>Port</th>
|
||||
<th>Description</th>
|
||||
<th>Vlan</th>
|
||||
<th>Speed</th>
|
||||
<th>Last Change</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
@@ -14,29 +16,55 @@ $(document).ready(function() {
|
||||
var table = $('#ps-data-table').dataTable({
|
||||
"deferRender": true,
|
||||
"data": [% results %],
|
||||
"columnDefs": [
|
||||
{ "sortable": false, "targets": 0 },
|
||||
{ "searchable": false, "targets": 0 },
|
||||
{ "type": 'portsort', "targets": [ 'portsort' ] }
|
||||
],
|
||||
"order": [[ 1, 'asc' ]],
|
||||
"columns": [{
|
||||
"data": 'up',
|
||||
"className": "nd_center-cell nd_devport-icon",
|
||||
"render": function(data, type, row, meta) {
|
||||
if (row.up_admin != "up") {
|
||||
return'<i class="icon-remove"></i>';
|
||||
}
|
||||
else if (row.up_admin == "up" && (row.up != "up" && row.up != "dormant")) {
|
||||
return '<i class="icon-arrow-down text-error"></i>';
|
||||
}
|
||||
else {
|
||||
return '<i class="icon-angle-up text-success"></i>';
|
||||
}
|
||||
}
|
||||
}, {
|
||||
"data": 'name',
|
||||
"render": function(data, type, row, meta) {
|
||||
return he.encode(data || '');
|
||||
}
|
||||
}, {
|
||||
"data": 'ip',
|
||||
"className": "nd_nowrap nd_center-cell",
|
||||
"render": function(data, type, row, meta) {
|
||||
var ddns = '';
|
||||
if (row.device.dns || row.device.name) {
|
||||
ddns = ' (' + he.encode(row.device.dns || row.device.name) + ')';
|
||||
ddns = '<br>(' + he.encode(row.device.dns || row.device.name) + ')';
|
||||
}
|
||||
return '<a href="[% device_ports %]&q=' + encodeURIComponent(data)
|
||||
+ '&f=' + encodeURIComponent(row.port) + '">' + he.encode(data)
|
||||
+ ' [' + he.encode(row.port) + ']</a>' + ddns;
|
||||
}
|
||||
}, {
|
||||
"data": 'descr',
|
||||
"data": 'port_vlans.vlan',
|
||||
"render": function(data, type, row, meta) {
|
||||
return he.encode(data || '');
|
||||
return data || '';
|
||||
}
|
||||
}, {
|
||||
"data": 'port_vlans.vlan',
|
||||
"data": 'speed',
|
||||
"render": function(data, type, row, meta) {
|
||||
return data || '';
|
||||
}
|
||||
}, {
|
||||
"data": 'lastchange_stamp',
|
||||
"render": function(data, type, row, meta) {
|
||||
return data || '';
|
||||
}
|
||||
|
||||
@@ -138,6 +138,7 @@
|
||||
<form class="navbar-search pull-left" method="get" action="[% uri_for('/search') %]">
|
||||
<input placeholder="Find Anything" class="search-query span3"
|
||||
id="nq" name="q" value="[% display_name %]" type="text" autocomplete="off"/>
|
||||
<input name="firstsearch" type="hidden" value="on">
|
||||
<div class="btn-group nd_navbar-search-group">
|
||||
<button class="btn btn-inverse nd_navbar-search-icon">
|
||||
<span style="font-size: 18px;">
|
||||
|
||||
@@ -10,5 +10,23 @@
|
||||
<span class="nd_searchcheckbox uneditable-input">Partial Match</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="clearfix input-prepend">
|
||||
<label class="add-on">
|
||||
<input type="checkbox" id="port_uplink"
|
||||
name="uplink"[% ' checked="checked"' IF params.uplink %]/>
|
||||
</label>
|
||||
<label class="nd_checkboxlabel" for="port_uplink">
|
||||
<span class="nd_searchcheckbox uneditable-input">Uplinks</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="clearfix input-prepend">
|
||||
<label class="add-on">
|
||||
<input type="checkbox" id="port_ethernet"
|
||||
name="ethernet"[% ' checked="checked"' IF params.ethernet %]/>
|
||||
</label>
|
||||
<label class="nd_checkboxlabel" for="port_ethernet">
|
||||
<span class="nd_searchcheckbox uneditable-input">Ethernet Only</span>
|
||||
</label>
|
||||
</div>
|
||||
<button id="[% tab.tag %]_submit" type="submit" class="btn btn-info">
|
||||
<i class="icon-search icon-large pull-left nd_navbar-icon"></i> Search Ports</button>
|
||||
|
||||
Reference in New Issue
Block a user