implement first device tab - details
This commit is contained in:
@@ -3,6 +3,23 @@ use base 'DBIx::Class::ResultSet';
|
||||
|
||||
use NetAddr::IP::Lite ':lower';
|
||||
|
||||
# override the built-in so we can munge some columns
|
||||
sub find {
|
||||
my ($set, $ip) = @_;
|
||||
|
||||
return $set->SUPER::find($ip,
|
||||
{
|
||||
'+select' => [
|
||||
\"replace(age(timestamp 'epoch' + uptime / 100 * interval '1 second', timestamp '1970-01-01 00:00:00-00')::text, 'mons', 'months')",
|
||||
\"to_char(last_discover, 'YYYY-MM-DD HH24:MI')",
|
||||
\"to_char(last_macsuck, 'YYYY-MM-DD HH24:MI')",
|
||||
\"to_char(last_arpnip, 'YYYY-MM-DD HH24:MI')",
|
||||
],
|
||||
'+as' => [qw/ uptime last_discover last_macsuck last_arpnip /],
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
# finds distinct values of a col for use in form selections
|
||||
sub get_distinct {
|
||||
my ($set, $col) = @_;
|
||||
|
||||
@@ -6,6 +6,7 @@ use Dancer::Plugin::DBIC;
|
||||
|
||||
use Digest::MD5 ();
|
||||
use Socket6 (); # to ensure dependency is met
|
||||
use HTML::Entities (); # to ensure dependency is met
|
||||
use NetAddr::IP::Lite ':lower';
|
||||
use Net::MAC ();
|
||||
use List::MoreUtils ();
|
||||
@@ -32,6 +33,49 @@ hook 'before' => sub {
|
||||
for qw/stamps vendor archived partial/;
|
||||
};
|
||||
|
||||
ajax '/ajax/content/device/:thing' => sub {
|
||||
return "<p>Hello ". param('thing') ."</p>";
|
||||
};
|
||||
|
||||
# device ports with a description (er, name) matching
|
||||
ajax '/ajax/content/device/details' => sub {
|
||||
my $ip = param('ip');
|
||||
return unless $ip;
|
||||
|
||||
my $device = schema('netdisco')->resultset('Device')->find($ip);
|
||||
return unless $device;
|
||||
|
||||
content_type('text/html');
|
||||
template 'ajax/device/details.tt', {
|
||||
d => $device,
|
||||
}, { layout => undef };
|
||||
};
|
||||
|
||||
get '/device' => sub {
|
||||
my $ip = NetAddr::IP::Lite->new(param('ip'));
|
||||
if (! $ip) {
|
||||
redirect '/?nosuchdevice=1';
|
||||
return;
|
||||
}
|
||||
|
||||
my $device = schema('netdisco')->resultset('Device')->find($ip->addr);
|
||||
if (! $device) {
|
||||
redirect '/?nosuchdevice=1';
|
||||
return;
|
||||
}
|
||||
|
||||
# list of tabs
|
||||
var('tabs' => [
|
||||
{ id => 'details', label => 'Details' },
|
||||
{ id => 'ports', label => 'Ports' },
|
||||
{ id => 'modules', label => 'Modules' },
|
||||
{ id => 'addresses', label => 'Addresses' },
|
||||
]);
|
||||
|
||||
params->{'tab'} ||= 'details';
|
||||
template 'device', { d => $device };
|
||||
};
|
||||
|
||||
# device with various properties or a default match-all
|
||||
ajax '/ajax/content/search/device' => sub {
|
||||
my $has_opt = List::MoreUtils::any {param($_)}
|
||||
@@ -50,7 +94,7 @@ ajax '/ajax/content/search/device' => sub {
|
||||
return unless $set->count;
|
||||
|
||||
content_type('text/html');
|
||||
template 'ajax/device.tt', {
|
||||
template 'ajax/search/device.tt', {
|
||||
results => $set,
|
||||
}, { layout => undef };
|
||||
};
|
||||
@@ -74,7 +118,7 @@ ajax '/ajax/content/search/node' => sub {
|
||||
my $ports = schema('netdisco')->resultset('DevicePort')
|
||||
->by_mac($mac->as_IEEE);
|
||||
|
||||
template 'ajax/node_by_mac.tt', {
|
||||
template 'ajax/search/node_by_mac.tt', {
|
||||
ips => $ips,
|
||||
sightings => $sightings,
|
||||
ports => $ports,
|
||||
@@ -95,7 +139,7 @@ ajax '/ajax/content/search/node' => sub {
|
||||
}
|
||||
return unless $set->count;
|
||||
|
||||
template 'ajax/node_by_ip.tt', {
|
||||
template 'ajax/search/node_by_ip.tt', {
|
||||
results => $set,
|
||||
}, { layout => undef };
|
||||
}
|
||||
@@ -116,7 +160,7 @@ ajax '/ajax/content/search/vlan' => sub {
|
||||
return unless $set->count;
|
||||
|
||||
content_type('text/html');
|
||||
template 'ajax/vlan.tt', {
|
||||
template 'ajax/search/vlan.tt', {
|
||||
results => $set,
|
||||
}, { layout => undef };
|
||||
};
|
||||
@@ -130,7 +174,7 @@ ajax '/ajax/content/search/port' => sub {
|
||||
return unless $set->count;
|
||||
|
||||
content_type('text/html');
|
||||
template 'ajax/port.tt', {
|
||||
template 'ajax/search/port.tt', {
|
||||
results => $set,
|
||||
}, { layout => undef };
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user