#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

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/apchanneldist' => require_login sub {
my @results = schema('netdisco')->resultset('DevicePortWireless')->search(
my @results = schema(vars->{'tenant'})->resultset('DevicePortWireless')->search(
{ channel => { '!=', '0' } },
{ select => [ 'channel', { count => 'channel' } ],
as => [qw/ channel ch_count /],

View File

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/apclients' => require_login sub {
my @results = schema('netdisco')->resultset('Device')->search(
my @results = schema(vars->{'tenant'})->resultset('Device')->search(
{ 'nodes.time_last' => { '>=', \'me.last_macsuck' } },
{ select => [ 'ip', 'dns', 'name', 'model', 'location' ],
join => { 'ports' => { 'ssid' => 'nodes' } },

View File

@@ -20,7 +20,7 @@ get '/ajax/content/report/apradiochannelpower/data' => require_login sub {
send_error( 'Missing parameter', 400 )
unless ( param('draw') && param('draw') =~ /\d+/ );
my $rs = schema('netdisco')->resultset('Virtual::ApRadioChannelPower');
my $rs = schema(vars->{'tenant'})->resultset('Virtual::ApRadioChannelPower');
my $exp_params = expand_hash( scalar params );
my $recordsTotal = $rs->count;
my @data = $rs->get_datatables_data($exp_params)->hri->all;
@@ -43,7 +43,7 @@ get '/ajax/content/report/apradiochannelpower' => require_login sub {
}
else {
my @results
= schema('netdisco')->resultset('Virtual::ApRadioChannelPower')
= schema(vars->{'tenant'})->resultset('Virtual::ApRadioChannelPower')
->hri->all;
return unless scalar @results;

View File

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/deviceaddrnodns' => require_login sub {
my @results = schema('netdisco')->resultset('Device')->search(
my @results = schema(vars->{'tenant'})->resultset('Device')->search(
{ 'device_ips.dns' => undef },
{ select => [ 'ip', 'dns', 'name', 'location', 'contact' ],
join => [qw/device_ips/],

View File

@@ -17,7 +17,7 @@ register_report(
get '/ajax/content/report/devicebylocation' => require_login sub {
my @results
= schema('netdisco')->resultset('Device')
= schema(vars->{'tenant'})->resultset('Device')
->columns( [qw/ ip dns name location vendor model /] )
->order_by( [qw/ location name ip vendor model /] )->hri->all;

View File

@@ -20,7 +20,7 @@ get '/ajax/content/report/devicednsmismatch' => require_login sub {
(my $suffix = '***:'. setting('domain_suffix')) =~ s|\Q(?^\Eu?|(?|g;
my @results
= schema('netdisco')->resultset('Virtual::DeviceDnsMismatch')
= schema(vars->{'tenant'})->resultset('Virtual::DeviceDnsMismatch')
->search( undef, { bind => [ $suffix, $suffix ] } )
->columns( [qw/ ip dns name location contact /] )->hri->all;

View File

@@ -20,7 +20,7 @@ get '/ajax/content/report/devicepoestatus/data' => require_login sub {
send_error( 'Missing parameter', 400 )
unless ( param('draw') && param('draw') =~ /\d+/ );
my $rs = schema('netdisco')->resultset('Virtual::DevicePoeStatus');
my $rs = schema(vars->{'tenant'})->resultset('Virtual::DevicePoeStatus');
my $exp_params = expand_hash( scalar params );
my $recordsTotal = $rs->count;
@@ -44,7 +44,7 @@ get '/ajax/content/report/devicepoestatus' => require_login sub {
}
else {
my @results
= schema('netdisco')->resultset('Virtual::DevicePoeStatus')
= schema(vars->{'tenant'})->resultset('Virtual::DevicePoeStatus')
->hri->all;
return unless scalar @results;

View File

@@ -17,7 +17,7 @@ register_report(
get '/ajax/content/report/duplexmismatch' => require_login sub {
my @results
= schema('netdisco')->resultset('Virtual::DuplexMismatch')->hri->all;
= schema(vars->{'tenant'})->resultset('Virtual::DuplexMismatch')->hri->all;
return unless scalar @results;

View File

@@ -17,7 +17,7 @@ register_report(
get '/ajax/content/report/halfduplex' => require_login sub {
my @results
= schema('netdisco')->resultset('DevicePort')
= schema(vars->{'tenant'})->resultset('DevicePort')
->columns( [qw/ ip port name duplex /] )->search(
{ up => 'up', duplex => { '-ilike' => 'half' } },
{ '+columns' => [qw/ device.dns device.name /],

View File

@@ -15,7 +15,7 @@ register_report(
);
get '/ajax/content/report/inventorybymodelbyos' => require_login sub {
my @results = schema('netdisco')->resultset('Device')->search(undef, {
my @results = schema(vars->{'tenant'})->resultset('Device')->search(undef, {
columns => [qw/vendor model os os_ver/],
select => [ { count => 'os_ver' } ],
as => [qw/ os_ver_count /],

View File

@@ -66,7 +66,7 @@ get '/ajax/content/report/ipinventory' => require_login sub {
# server-side to provide user feedback
$limit = 8192 if $limit > 8192;
my $rs1 = schema('netdisco')->resultset('DeviceIp')->search(
my $rs1 = schema(vars->{'tenant'})->resultset('DeviceIp')->search(
undef,
{ join => ['device', 'device_port'],
select => [
@@ -86,7 +86,7 @@ get '/ajax/content/report/ipinventory' => require_login sub {
}
)->hri;
my $rs2 = schema('netdisco')->resultset('NodeIp')->search(
my $rs2 = schema(vars->{'tenant'})->resultset('NodeIp')->search(
undef,
{ join => ['oui', 'netbios'],
columns => [qw( ip mac time_first time_last dns active)],
@@ -99,7 +99,7 @@ get '/ajax/content/report/ipinventory' => require_login sub {
}
)->hri;
my $rs3 = schema('netdisco')->resultset('NodeNbt')->search(
my $rs3 = schema(vars->{'tenant'})->resultset('NodeNbt')->search(
undef,
{ join => ['oui'],
columns => [qw( ip mac time_first time_last )],
@@ -120,7 +120,7 @@ get '/ajax/content/report/ipinventory' => require_login sub {
if ( $never ) {
$subnet = NetAddr::IP::Lite->new('0.0.0.0/32') if ($subnet->bits ne 32);
my $rs4 = schema('netdisco')->resultset('Virtual::CidrIps')->search(
my $rs4 = schema(vars->{'tenant'})->resultset('Virtual::CidrIps')->search(
undef,
{ bind => [ $subnet->cidr ],
columns => [qw( ip mac time_first time_last dns active node age vendor nbname )],

View File

@@ -41,11 +41,11 @@ get '/ajax/content/report/moduleinventory/data' => require_login sub {
send_error( 'Missing parameter', 400 )
unless ( param('draw') && param('draw') =~ /\d+/ );
my $rs = schema('netdisco')->resultset('DeviceModule');
my $rs = schema(vars->{'tenant'})->resultset('DeviceModule');
$rs = $rs->search( { -bool => 'fru' } ) if param('fruonly');
if ( param('device') ) {
my @ips = schema('netdisco')->resultset('Device')
my @ips = schema(vars->{'tenant'})->resultset('Device')
->search_fuzzy( param('device') )->get_column('ip')->all;
params->{'ips'} = \@ips;
@@ -87,14 +87,14 @@ get '/ajax/content/report/moduleinventory' => require_login sub {
my $has_opt = List::MoreUtils::any { param($_) }
qw/device description name type model serial class/;
my $rs = schema('netdisco')->resultset('DeviceModule');
my $rs = schema(vars->{'tenant'})->resultset('DeviceModule');
$rs = $rs->search( { -bool => 'fru' } ) if param('fruonly');
my @results;
if ( $has_opt && !request->is_ajax ) {
if ( param('device') ) {
my @ips = schema('netdisco')->resultset('Device')
my @ips = schema(vars->{'tenant'})->resultset('Device')
->search_fuzzy( param('device') )->get_column('ip')->all;
params->{'ips'} = \@ips;

View File

@@ -41,7 +41,7 @@ get '/ajax/content/report/netbios/data' => require_login sub {
my $domain = param('domain');
my $rs = schema('netdisco')->resultset('NodeNbt');
my $rs = schema(vars->{'tenant'})->resultset('NodeNbt');
my $search = $domain eq 'blank' ? '' : $domain;
$rs = $rs->search( { domain => $search } )
@@ -69,7 +69,7 @@ get '/ajax/content/report/netbios' => require_login sub {
my $domain = param('domain');
my $rs = schema('netdisco')->resultset('NodeNbt');
my $rs = schema(vars->{'tenant'})->resultset('NodeNbt');
my @results;
if ( defined $domain && !request->is_ajax ) {

View File

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/nodemultiips' => require_login sub {
my @results = schema('netdisco')->resultset('Node')->search(
my @results = schema(vars->{'tenant'})->resultset('Node')->search(
{},
{ select => [ 'mac', 'switch', 'port' ],
join => [qw/device ips oui/],

View File

@@ -42,7 +42,7 @@ get '/ajax/content/report/nodevendor/data' => require_login sub {
my $vendor = param('vendor');
my $rs = schema('netdisco')->resultset('Node');
my $rs = schema(vars->{'tenant'})->resultset('Node');
my $match = $vendor eq 'blank' ? undef : $vendor;
@@ -78,7 +78,7 @@ get '/ajax/content/report/nodevendor' => require_login sub {
my $vendor = param('vendor');
my $rs = schema('netdisco')->resultset('Node');
my $rs = schema(vars->{'tenant'})->resultset('Node');
my @results;
if ( defined $vendor && !request->is_ajax ) {

View File

@@ -42,7 +42,7 @@ register_report(
get '/ajax/content/report/nodesdiscovered' => require_login sub {
my $op = param('matchall') ? '-and' : '-or';
my @results = schema('netdisco')->resultset('Virtual::NodesDiscovered')
my @results = schema(vars->{'tenant'})->resultset('Virtual::NodesDiscovered')
->search({
$op => [
(param('aps') ?

View File

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/portadmindown' => require_login sub {
my @results = schema('netdisco')->resultset('Device')->search(
my @results = schema(vars->{'tenant'})->resultset('Device')->search(
{ 'up_admin' => 'down' },
{ select => [ 'ip', 'dns', 'name' ],
join => [ 'ports' ],

View File

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/portblocking' => require_login sub {
my @results = schema('netdisco')->resultset('Device')->search(
my @results = schema(vars->{'tenant'})->resultset('Device')->search(
{ 'stp' => [ 'blocking', 'broken' ], 'up' => { '!=', 'down' } },
{ select => [ 'ip', 'dns', 'name' ],
join => ['ports'],

View File

@@ -26,8 +26,8 @@ sub _sanity_ok {
ajax '/ajax/control/report/portlog/add' => require_login sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $user = schema('netdisco')->resultset('DevicePortLog')
schema(vars->{'tenant'})->txn_do(sub {
my $user = schema(vars->{'tenant'})->resultset('DevicePortLog')
->create({
ip => param('ip'),
port => param('port'),
@@ -45,11 +45,11 @@ ajax '/ajax/content/report/portlog' => require_login sub {
my $port = param('f');
send_error('Bad Request', 400) unless $device and $port;
$device = schema('netdisco')->resultset('Device')
$device = schema(vars->{'tenant'})->resultset('Device')
->search_for_device($device);
return unless $device;
my $set = schema('netdisco')->resultset('DevicePortLog')->search({
my $set = schema(vars->{'tenant'})->resultset('DevicePortLog')->search({
ip => $device->ip,
port => $port,
}, {

View File

@@ -22,7 +22,7 @@ register_report(
);
get '/ajax/content/report/portmultinodes' => require_login sub {
my @results = schema('netdisco')->resultset('Device')->search(
my @results = schema(vars->{'tenant'})->resultset('Device')->search(
{ 'ports.remote_ip' => undef,
(param('vlan') ?
('ports.vlan' => param('vlan'), 'nodes.vlan' => param('vlan')) : ()),

View File

@@ -46,7 +46,7 @@ get '/ajax/content/report/portssid' => require_login sub {
my $ssid = param('ssid');
my $rs = schema('netdisco')->resultset('DevicePortSsid');
my $rs = schema(vars->{'tenant'})->resultset('DevicePortSsid');
if ( defined $ssid ) {

View File

@@ -28,11 +28,11 @@ register_report(
);
get '/ajax/content/report/portutilization' => require_login sub {
return unless schema('netdisco')->resultset('Device')->count;
return unless schema(vars->{'tenant'})->resultset('Device')->count;
my $age_num = param('age_num') || 3;
my $age_unit = param('age_unit') || 'months';
my @results = schema('netdisco')->resultset('Virtual::PortUtilization')
my @results = schema(vars->{'tenant'})->resultset('Virtual::PortUtilization')
->search(undef, { bind => [ "$age_num $age_unit", "$age_num $age_unit", "$age_num $age_unit" ] })->hri->all;
if (request->is_ajax) {

View File

@@ -17,8 +17,8 @@ register_report(
);
get '/ajax/content/report/portvlanmismatch' => require_login sub {
return unless schema('netdisco')->resultset('Device')->count;
my @results = schema('netdisco')
return unless schema(vars->{'tenant'})->resultset('Device')->count;
my @results = schema(vars->{'tenant'})
->resultset('Virtual::PortVLANMismatch')->search({},{
bind => [ setting('sidebar_defaults')->{'device_ports'}->{'p_hide1002'}->{'default'}
? (1002, 1003, 1004, 1005) : (0, 0, 0, 0) ],

View File

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/ssidinventory' => require_login sub {
my @results = schema('netdisco')->resultset('DevicePortSsid')
my @results = schema(vars->{'tenant'})->resultset('DevicePortSsid')
->get_ssids->hri->all;
return unless scalar @results;

View File

@@ -40,7 +40,7 @@ get '/ajax/content/report/subnets' => require_login sub {
$start = $start . ' 00:00:00';
$end = $end . ' 23:59:59';
my @results = schema('netdisco')->resultset('Virtual::SubnetUtilization')
my @results = schema(vars->{'tenant'})->resultset('Virtual::SubnetUtilization')
->search(undef,{
bind => [ $subnet, $start, $end, $start, $subnet, $start, $start ],
})->hri->all;

View File

@@ -16,7 +16,7 @@ register_report(
);
get '/ajax/content/report/vlaninventory' => require_login sub {
my @results = schema('netdisco')->resultset('DeviceVlan')->search(
my @results = schema(vars->{'tenant'})->resultset('DeviceVlan')->search(
{ 'me.description' => { '!=', 'NULL' },
'me.vlan' => { '>' => 0 },
'ports.vlan' => { '>' => 0 },