#929 implement first half of multi tenancy with tenant_databases setting

This commit is contained in:
Oliver Gorwits
2022-09-24 19:01:05 +01:00
parent b391f83d60
commit 1d5f3ce316
71 changed files with 355 additions and 205 deletions

View File

@@ -13,7 +13,7 @@ get '/ajax/content/device/addresses' => require_login sub {
my $q = param('q');
my $device
= schema('netdisco')->resultset('Device')->search_for_device($q)
= schema(vars->{'tenant'})->resultset('Device')->search_for_device($q)
or send_error( 'Bad device', 400 );
my @results = $device->device_ips

View File

@@ -12,11 +12,11 @@ register_device_tab({ tag => 'details', label => 'Details' });
# device details table
ajax '/ajax/content/device/details' => require_login sub {
my $q = param('q');
my $device = schema('netdisco')->resultset('Device')
my $device = schema(vars->{'tenant'})->resultset('Device')
->search_for_device($q) or send_error('Bad device', 400);
my @results
= schema('netdisco')->resultset('Device')
= schema(vars->{'tenant'})->resultset('Device')
->search({ 'me.ip' => $device->ip },
{
'+select' => ['snapshot.ip'],
@@ -27,11 +27,11 @@ ajax '/ajax/content/device/details' => require_login sub {
->hri->all;
my @power
= schema('netdisco')->resultset('DevicePower')
= schema(vars->{'tenant'})->resultset('DevicePower')
->search( { 'me.ip' => $device->ip } )->with_poestats->hri->all;
my @interfaces
= schema('netdisco')->resultset('Device')
= schema(vars->{'tenant'})->resultset('Device')
->find($device->ip)
->device_ips->hri->all;

View File

@@ -13,7 +13,7 @@ register_device_tab({ tag => 'modules', label => 'Modules' });
ajax '/ajax/content/device/modules' => require_login sub {
my $q = param('q');
my $device = schema('netdisco')->resultset('Device')
my $device = schema(vars->{'tenant'})->resultset('Device')
->search_for_device($q) or send_error('Bad device', 400);
my @set = $device->modules->search({}, {order_by => { -asc => [qw/parent class pos index/] }});

View File

@@ -19,7 +19,7 @@ ajax '/ajax/content/device/netmap' => require_login sub {
ajax '/ajax/data/device/netmappositions' => require_login sub {
my $q = param('q');
my $qdev = schema('netdisco')->resultset('Device')
my $qdev = schema(vars->{'tenant'})->resultset('Device')
->search_for_device($q) or send_error('Bad device', 400);
my $p = param('positions') or send_error('Missing positions', 400);
@@ -55,7 +55,7 @@ ajax '/ajax/data/device/netmappositions' => require_login sub {
}
return unless scalar keys %clean;
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
my $posrow = schema(vars->{'tenant'})->resultset('NetmapPositions')->find({
device => (($mapshow eq 'neighbors') ? $qdev->ip : undef),
host_groups => \[ '= ?', [host_groups => [sort @hgrplist]] ],
locations => \[ '= ?', [locations => [sort @lgrplist]] ],
@@ -66,7 +66,7 @@ ajax '/ajax/data/device/netmappositions' => require_login sub {
$posrow->update({ positions => to_json(\%clean) });
}
else {
schema('netdisco')->resultset('NetmapPositions')->create({
schema(vars->{'tenant'})->resultset('NetmapPositions')->create({
device => (($mapshow eq 'neighbors') ? $qdev->ip : undef),
host_groups => [sort @hgrplist],
locations => [sort @lgrplist],
@@ -136,7 +136,7 @@ sub make_link_infostring {
ajax '/ajax/data/device/netmap' => require_login sub {
my $q = param('q');
my $qdev = schema('netdisco')->resultset('Device')
my $qdev = schema(vars->{'tenant'})->resultset('Device')
->search_for_device($q) or send_error('Bad device', 400);
my $vlan = param('vlan');
@@ -168,7 +168,7 @@ ajax '/ajax/data/device/netmap' => require_login sub {
# LINKS
my %seen_link = ();
my $links = schema('netdisco')->resultset('Virtual::DeviceLinks')->search({
my $links = schema(vars->{'tenant'})->resultset('Virtual::DeviceLinks')->search({
($mapshow eq 'neighbors' ? ( -or => [
{ left_ip => $qdev->ip },
{ right_ip => $qdev->ip },
@@ -195,7 +195,7 @@ ajax '/ajax/data/device/netmap' => require_login sub {
# DEVICES (NODES)
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
my $posrow = schema(vars->{'tenant'})->resultset('NetmapPositions')->find({
device => (($mapshow eq 'neighbors') ? $qdev->ip : undef),
host_groups => \[ '= ?', [host_groups => [sort @hgrplist]] ],
locations => \[ '= ?', [locations => [sort @lgrplist]] ],
@@ -203,7 +203,7 @@ ajax '/ajax/data/device/netmap' => require_login sub {
});
my $pos_for = from_json( $posrow ? $posrow->positions : '{}' );
my $devices = schema('netdisco')->resultset('Device')->search({}, {
my $devices = schema(vars->{'tenant'})->resultset('Device')->search({}, {
'+select' => [\'floor(log(throughput.total))'], '+as' => ['log'],
join => 'throughput', distinct => 1,
})->with_times;

View File

@@ -18,7 +18,7 @@ get '/ajax/content/device/ports' => require_login sub {
$prefer = ''
unless defined $prefer and $prefer =~ m/^(?:port|name|vlan)$/;
my $device = schema('netdisco')->resultset('Device')
my $device = schema(vars->{'tenant'})->resultset('Device')
->search_for_device($q) or send_error('Bad device', 400);
my $set = $device->ports->with_properties;

View File

@@ -15,10 +15,10 @@ use Module::Load ();
use Try::Tiny;
register_device_tab({ tag => 'snmp', label => 'SNMP',
render_if => sub { schema('netdisco')->resultset('DeviceBrowser')->count() } });
render_if => sub { schema(vars->{'tenant'})->resultset('DeviceBrowser')->count() } });
get '/ajax/content/device/snmp' => require_login sub {
my $device = try { schema('netdisco')->resultset('Device')
my $device = try { schema(vars->{'tenant'})->resultset('Device')
->search_for_device( param('q') ) }
or send_error('Bad Device', 404);
@@ -27,7 +27,7 @@ get '/ajax/content/device/snmp' => require_login sub {
};
ajax '/ajax/data/device/:ip/snmptree/:base' => require_login sub {
my $device = try { schema('netdisco')->resultset('Device')
my $device = try { schema(vars->{'tenant'})->resultset('Device')
->find( param('ip') ) }
or send_error('Bad Device', 404);
@@ -41,14 +41,14 @@ ajax '/ajax/data/device/:ip/snmptree/:base' => require_login sub {
children => \0,
state => { disabled => \1 },
icon => 'icon-search',
}] unless schema('netdisco')->resultset('DeviceSnapshot')->find($device->ip);
}] unless schema(vars->{'tenant'})->resultset('DeviceSnapshot')->find($device->ip);
return to_json [{
text => 'No MIB data. Please run `~/bin/netdisco-do loadmibs`.',
children => \0,
state => { disabled => \1 },
icon => 'icon-search',
}] unless schema('netdisco')->resultset('SNMPObject')->count();
}] unless schema(vars->{'tenant'})->resultset('SNMPObject')->count();
my $items = _get_snmp_data($device->ip, $base);
to_json $items;
@@ -61,7 +61,7 @@ ajax '/ajax/data/snmp/typeahead' => require_login sub {
my $deviceonly = param('deviceonly');
my $table = ($deviceonly ? 'DeviceBrowser' : 'SNMPObject');
my @found = schema('netdisco')->resultset($table)
my @found = schema(vars->{'tenant'})->resultset($table)
->search({ -or => [ oid => $term,
oid => { -like => ($term .'.%') },
leaf => { -ilike => ('%'. $term .'%') } ],
@@ -80,14 +80,14 @@ ajax '/ajax/data/snmp/nodesearch' => require_login sub {
my $found = undef;
if ($partial) {
$found = schema('netdisco')->resultset('SNMPObject')
$found = schema(vars->{'tenant'})->resultset('SNMPObject')
->search({ -or => [ oid => $to_match,
oid => { -like => ($to_match .'.%') },
leaf => { -ilike => ($to_match .'%') } ] },
{ rows => 1, order_by => 'oid_parts' })->first;
}
else {
$found = schema('netdisco')->resultset('SNMPObject')
$found = schema(vars->{'tenant'})->resultset('SNMPObject')
->search({ -or => [ oid => $to_match,
leaf => $to_match ] },
{ rows => 1, order_by => 'oid_parts' })->first;
@@ -108,14 +108,14 @@ ajax '/ajax/data/snmp/nodesearch' => require_login sub {
};
ajax '/ajax/content/device/:ip/snmpnode/:oid' => require_login sub {
my $device = try { schema('netdisco')->resultset('Device')
my $device = try { schema(vars->{'tenant'})->resultset('Device')
->find( param('ip') ) }
or send_error('Bad Device', 404);
my $oid = param('oid');
$oid =~ m/^\.1(\.\d+)*$/ or send_error('Bad OID', 404);
my $object = schema('netdisco')->resultset('DeviceBrowser')
my $object = schema(vars->{'tenant'})->resultset('DeviceBrowser')
->with_snmp_object($device->ip)->find({ 'snmp_object.oid' => $oid })
or send_error('Bad OID', 404);
@@ -138,7 +138,7 @@ sub _get_snmp_data {
my @parts = grep {length} split m/\./, $base;
my %meta = map { ('.'. join '.', @{$_->{oid_parts}}) => $_ }
schema('netdisco')->resultset('Virtual::FilteredSNMPObject')
schema(vars->{'tenant'})->resultset('Virtual::FilteredSNMPObject')
->search({}, { bind => [
$ip,
(scalar @parts + 1),

View File

@@ -15,7 +15,7 @@ register_device_tab({ tag => 'vlans', label => 'VLANs', provides_csv => 1 });
get '/ajax/content/device/vlans' => require_login sub {
my $q = param('q');
my $device = schema('netdisco')->resultset('Device')
my $device = schema(vars->{'tenant'})->resultset('Device')
->search_for_device($q) or send_error('Bad device', 400);
my @results = $device->vlans->search(
{ vlan => { '>' => 0 } }, { order_by => 'vlan' } )->hri->all;