allow vlan search by name
This commit is contained in:
@@ -110,4 +110,21 @@ sub carrying_vlan {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub carrying_vlan_name {
|
||||||
|
my ($set, $name) = @_;
|
||||||
|
return $set unless $name;
|
||||||
|
$name = "\%$name\%" if $name !~ m/\%/;
|
||||||
|
|
||||||
|
return $set->search(
|
||||||
|
{
|
||||||
|
'vlans.description' => { '-ilike' => $name },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
order_by => [qw/ me.dns me.ip /],
|
||||||
|
columns => [qw/ me.ip me.dns me.model me.os me.vendor /],
|
||||||
|
prefetch => 'vlans',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|||||||
@@ -30,17 +30,6 @@ hook 'before' => sub {
|
|||||||
var('query_defaults' => { map { ($_ => "tab=$_") } qw/node/ });
|
var('query_defaults' => { map { ($_ => "tab=$_") } qw/node/ });
|
||||||
var('query_defaults')->{node} .= "\&$_=". (param($_) || '')
|
var('query_defaults')->{node} .= "\&$_=". (param($_) || '')
|
||||||
for qw/stamps vendor archived partial/;
|
for qw/stamps vendor archived partial/;
|
||||||
|
|
||||||
# set up property lists for device search
|
|
||||||
var('model_list' => [
|
|
||||||
schema('netdisco')->resultset('Device')->get_distinct('model')
|
|
||||||
]);
|
|
||||||
var('os_ver_list' => [
|
|
||||||
schema('netdisco')->resultset('Device')->get_distinct('os_ver')
|
|
||||||
]);
|
|
||||||
var('vendor_list' => [
|
|
||||||
schema('netdisco')->resultset('Device')->get_distinct('vendor')
|
|
||||||
]);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# device with various properties or a default match-all
|
# device with various properties or a default match-all
|
||||||
@@ -51,15 +40,14 @@ ajax '/ajax/content/search/device' => sub {
|
|||||||
|
|
||||||
if ($has_opt) {
|
if ($has_opt) {
|
||||||
$set = schema('netdisco')->resultset('Device')->by_field(scalar params);
|
$set = schema('netdisco')->resultset('Device')->by_field(scalar params);
|
||||||
return unless $set->count;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my $q = param('q');
|
my $q = param('q');
|
||||||
return unless $q;
|
return unless $q;
|
||||||
|
|
||||||
$set = schema('netdisco')->resultset('Device')->by_any($q);
|
$set = schema('netdisco')->resultset('Device')->by_any($q);
|
||||||
return unless $set->count;
|
|
||||||
}
|
}
|
||||||
|
return unless $set->count;
|
||||||
|
|
||||||
content_type('text/html');
|
content_type('text/html');
|
||||||
template 'ajax/device.tt', {
|
template 'ajax/device.tt', {
|
||||||
@@ -99,14 +87,13 @@ ajax '/ajax/content/search/node' => sub {
|
|||||||
# by_ip() will extract cidr notation if necessary
|
# by_ip() will extract cidr notation if necessary
|
||||||
$set = schema('netdisco')->resultset('NodeIp')
|
$set = schema('netdisco')->resultset('NodeIp')
|
||||||
->by_ip(param('archived'), $ip);
|
->by_ip(param('archived'), $ip);
|
||||||
return unless $set->count;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$node = "\%$node\%" if param('partial');
|
$node = "\%$node\%" if param('partial');
|
||||||
$set = schema('netdisco')->resultset('NodeIp')
|
$set = schema('netdisco')->resultset('NodeIp')
|
||||||
->by_name(param('archived'), $node);
|
->by_name(param('archived'), $node);
|
||||||
return unless $set->count;
|
|
||||||
}
|
}
|
||||||
|
return unless $set->count;
|
||||||
|
|
||||||
template 'ajax/node_by_ip.tt', {
|
template 'ajax/node_by_ip.tt', {
|
||||||
results => $set,
|
results => $set,
|
||||||
@@ -117,9 +104,15 @@ ajax '/ajax/content/search/node' => sub {
|
|||||||
# devices carrying vlan xxx
|
# devices carrying vlan xxx
|
||||||
ajax '/ajax/content/search/vlan' => sub {
|
ajax '/ajax/content/search/vlan' => sub {
|
||||||
my $vlan = param('q');
|
my $vlan = param('q');
|
||||||
return unless $vlan and $vlan =~ m/^\d+$/;
|
return unless $vlan;
|
||||||
|
my $set;
|
||||||
|
|
||||||
my $set = schema('netdisco')->resultset('Device')->carrying_vlan($vlan);
|
if ($vlan =~ m/^\d+$/) {
|
||||||
|
$set = schema('netdisco')->resultset('Device')->carrying_vlan($vlan);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$set = schema('netdisco')->resultset('Device')->carrying_vlan_name($vlan);
|
||||||
|
}
|
||||||
return unless $set->count;
|
return unless $set->count;
|
||||||
|
|
||||||
content_type('text/html');
|
content_type('text/html');
|
||||||
@@ -147,6 +140,17 @@ get '/' => sub {
|
|||||||
};
|
};
|
||||||
|
|
||||||
get '/search' => sub {
|
get '/search' => sub {
|
||||||
|
# set up property lists for device search
|
||||||
|
var('model_list' => [
|
||||||
|
schema('netdisco')->resultset('Device')->get_distinct('model')
|
||||||
|
]);
|
||||||
|
var('os_ver_list' => [
|
||||||
|
schema('netdisco')->resultset('Device')->get_distinct('os_ver')
|
||||||
|
]);
|
||||||
|
var('vendor_list' => [
|
||||||
|
schema('netdisco')->resultset('Device')->get_distinct('vendor')
|
||||||
|
]);
|
||||||
|
|
||||||
my $q = param('q');
|
my $q = param('q');
|
||||||
if ($q and not param('tab')) {
|
if ($q and not param('tab')) {
|
||||||
# pick most likely tab for initial results
|
# pick most likely tab for initial results
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
[% WHILE (row = results.next) %]
|
[% WHILE (row = results.next) %]
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/device?q=[% row.ip %]">[% row.dns.remove(settings.domain_suffix) %]</a></td>
|
<td><a href="/device?ip=[% row.ip %]">[% row.dns.remove(settings.domain_suffix) %]</a></td>
|
||||||
<td>[% row.contact %]</td>
|
<td>[% row.contact %]</td>
|
||||||
<td>[% row.location %]</td>
|
<td>[% row.location %]</td>
|
||||||
<td>[% row.name %]</td>
|
<td>[% row.name %]</td>
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<td> </td>
|
<td> </td>
|
||||||
[% END %]
|
[% END %]
|
||||||
<td>Switch Port</td>
|
<td>Switch Port</td>
|
||||||
<td><a href="/device?q=[% node.switch | url %]&port=[% node.port | url %]">[% node.switch %] [ [% node.port %] ]</a>
|
<td><a href="/device?ip=[% node.switch | url %]&port=[% node.port | url %]">[% node.switch %] [ [% node.port %] ]</a>
|
||||||
[% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %]
|
[% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %]
|
||||||
[% ' <span class="label warning">a</span>' IF NOT node.active %]
|
[% ' <span class="label warning">a</span>' IF NOT node.active %]
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
<td> </td>
|
<td> </td>
|
||||||
[% END %]
|
[% END %]
|
||||||
<td>Switch Port</td>
|
<td>Switch Port</td>
|
||||||
<td><a href="/device?q=[% node.switch | url %]&port=[% node.port | url %]">[% node.switch %] [ [% node.port %] ]</a>
|
<td><a href="/device?ip=[% node.switch | url %]&port=[% node.port | url %]">[% node.switch %] [ [% node.port %] ]</a>
|
||||||
[% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %]
|
[% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %]
|
||||||
[% ' <span class="label warning">a</span>' IF NOT node.active %]
|
[% ' <span class="label warning">a</span>' IF NOT node.active %]
|
||||||
</td>
|
</td>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<td> </td>
|
<td> </td>
|
||||||
[% END %]
|
[% END %]
|
||||||
<td>Switch Port</td>
|
<td>Switch Port</td>
|
||||||
<td><a href="/device?q=[% port.ip | url %]&port=[% port.port | url %]">[% port.ip %] [ [% port.port %] ]</a>
|
<td><a href="/device?ip=[% port.ip | url %]&port=[% port.port | url %]">[% port.ip %] [ [% port.port %] ]</a>
|
||||||
[% ' (' _ port.device.dns.remove(settings.domain_suffix) _ ')' IF port.device.dns %]
|
[% ' (' _ port.device.dns.remove(settings.domain_suffix) _ ')' IF port.device.dns %]
|
||||||
</td>
|
</td>
|
||||||
[% IF params.stamps %]
|
[% IF params.stamps %]
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<table class="bordered-table condensed-table zebra-striped">
|
<table class="bordered-table condensed-table zebra-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>Vlan</th>
|
||||||
<th>Device</th>
|
<th>Device</th>
|
||||||
<th>Description</th>
|
<th>Description</th>
|
||||||
<th>Model</th>
|
<th>Model</th>
|
||||||
@@ -11,16 +12,18 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
[% WHILE (row = results.next) %]
|
[% WHILE (row = results.next) %]
|
||||||
<tr>
|
<tr>
|
||||||
|
<td><a class="nd_linkcell nd_stealthlink"
|
||||||
|
href="/device?ip=[% row.ip %]&vlan=[% row.vlan.vlan %]">[% row.vlan.vlan %]</a></td>
|
||||||
<td><a class="nd_linkcell"
|
<td><a class="nd_linkcell"
|
||||||
href="/device?q=[% row.ip %]&vlan=[% params.q %]">[% row.dns %]</a></td>
|
href="/device?ip=[% row.ip %]&vlan=[% row.vlan.vlan %]">[% row.dns %]</a></td>
|
||||||
<td><a class="nd_linkcell nd_stealthlink"
|
<td><a class="nd_linkcell nd_stealthlink"
|
||||||
href="/device?q=[% row.ip %]&vlan=[% params.q %]">[% row.vlan.description %]</a></td>
|
href="/device?ip=[% row.ip %]&vlan=[% row.vlan.vlan %]">[% row.vlan.description %]</a></td>
|
||||||
<td><a class="nd_linkcell nd_stealthlink"
|
<td><a class="nd_linkcell nd_stealthlink"
|
||||||
href="/device?q=[% row.ip %]&vlan=[% params.q %]">[% row.model %]</a></td>
|
href="/device?ip=[% row.ip %]&vlan=[% row.vlan.vlan %]">[% row.model %]</a></td>
|
||||||
<td><a class="nd_linkcell nd_stealthlink"
|
<td><a class="nd_linkcell nd_stealthlink"
|
||||||
href="/device?q=[% row.ip %]&vlan=[% params.q %]">[% row.os %]</a></td>
|
href="/device?ip=[% row.ip %]&vlan=[% row.vlan.vlan %]">[% row.os %]</a></td>
|
||||||
<td><a class="nd_linkcell nd_stealthlink"
|
<td><a class="nd_linkcell nd_stealthlink"
|
||||||
href="/device?q=[% row.ip %]&vlan=[% params.q %]">[% row.vendor %]</a></td>
|
href="/device?ip=[% row.ip %]&vlan=[% row.vlan.vlan %]">[% row.vendor %]</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
Reference in New Issue
Block a user