Refactor eloquent base (#9716)

* extract PortRelatedModel and DeviceRelatedModel

* add scope for inDeviceGroup

* handle null device group
This commit is contained in:
Tony Murray
2019-01-22 17:04:28 -06:00
committed by GitHub
parent e2a8349440
commit d64f3acb15
29 changed files with 128 additions and 350 deletions

View File

@@ -25,7 +25,7 @@
namespace App\Models;
class Application extends BaseModel
class Application extends DeviceRelatedModel
{
/**
* Indicates if the model should be timestamped.
@@ -77,18 +77,4 @@ class Application extends BaseModel
return collect(self::$display_name)
->get($this->app_type, ucwords(str_replace(['_', '-'], ' ', $this->app_type)));
}
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -27,7 +27,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
class BgpPeer extends BaseModel
class BgpPeer extends DeviceRelatedModel
{
public $timestamps = false;
protected $table = 'bgpPeers';
@@ -43,16 +43,4 @@ class BgpPeer extends BaseModel
->orWhere('bgpPeerAdminStatus', 'running');
})->where('bgpPeerState', '!=', 'established');
}
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,24 +25,9 @@
namespace App\Models;
class CefSwitching extends BaseModel
class CefSwitching extends DeviceRelatedModel
{
public $timestamps = false;
protected $table = 'cef_switching';
protected $primaryKey = 'cef_switching_id';
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,22 +25,8 @@
namespace App\Models;
class Component extends BaseModel
class Component extends DeviceRelatedModel
{
public $timestamps = false;
protected $table = 'component';
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -27,7 +27,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class DevicePerf extends BaseModel
class DevicePerf extends DeviceRelatedModel
{
protected $table = 'device_perf';
protected $fillable = ['device_id', 'timestamp', 'xmt', 'rcv', 'loss', 'min', 'max', 'avg'];
@@ -55,11 +55,4 @@ class DevicePerf extends BaseModel
$model->timestamp = $model->freshTimestamp();
});
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
}

View File

@@ -0,0 +1,51 @@
<?php
/**
* DeviceRelatedModel.php
*
* -Description-
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2019 Tony Murray
* @author Tony Murray <murraytony@gmail.com>
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
class DeviceRelatedModel extends BaseModel
{
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
public function scopeInDeviceGroup($query, $deviceGroup)
{
$groups = $deviceGroup instanceof DeviceGroup ? $deviceGroup->devices()->pluck('devices.device_id') : [];
return $query->whereIn($this->getTable() . '.device_id', $groups);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
}

View File

@@ -27,7 +27,7 @@ namespace App\Models;
use Carbon\Carbon;
class Eventlog extends BaseModel
class Eventlog extends DeviceRelatedModel
{
protected $table = 'eventlog';
protected $primaryKey = 'event_id';
@@ -63,24 +63,8 @@ class Eventlog extends BaseModel
}
}
// ---- Query scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
/**
* Returns the device this entry belongs to.
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
public function related()
{
return $this->morphTo('related', 'type', 'reference');

View File

@@ -25,22 +25,8 @@
namespace App\Models;
class Ipv4Address extends BaseModel
class Ipv4Address extends PortRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'ipv4_address_id';
// ---- Query scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasPortAccess($query, $user);
}
// ---- Define Relationships ----
public function port()
{
return $this->belongsTo('App\Models\Port', 'port_id', 'port_id');
}
}

View File

@@ -2,10 +2,15 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Ipv4Mac extends Model
class Ipv4Mac extends PortRelatedModel
{
protected $table = 'ipv4_mac';
public $timestamps = false;
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,22 +25,8 @@
namespace App\Models;
class Ipv6Address extends BaseModel
class Ipv6Address extends PortRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'ipv6_address_id';
// ---- Query scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasPortAccess($query, $user);
}
// ---- Define Relationships ----
public function port()
{
return $this->belongsTo('App\Models\Port', 'port_id', 'port_id');
}
}

View File

@@ -2,24 +2,10 @@
namespace App\Models;
class Mempool extends BaseModel
class Mempool extends DeviceRelatedModel
{
protected $table = 'mempools';
protected $primaryKey = 'mempool_id';
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
}

View File

@@ -25,22 +25,8 @@
namespace App\Models;
class MuninPlugin extends BaseModel
class MuninPlugin extends DeviceRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'mplug_id';
// ---- Query scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,7 +25,7 @@
namespace App\Models;
class OspfArea extends BaseModel
class OspfArea extends DeviceRelatedModel
{
public $timestamps = false;
protected $fillable = [
@@ -42,18 +42,4 @@ class OspfArea extends BaseModel
'ospfAreaSummary',
'ospfAreaStatus',
];
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,7 +25,7 @@
namespace App\Models;
class OspfInstance extends BaseModel
class OspfInstance extends DeviceRelatedModel
{
public $timestamps = false;
protected $fillable = [
@@ -47,18 +47,4 @@ class OspfInstance extends BaseModel
'ospfExitOverflowInterval',
'ospfDemandExtensions',
];
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,7 +25,7 @@
namespace App\Models;
class OspfNbr extends BaseModel
class OspfNbr extends DeviceRelatedModel
{
public $timestamps = false;
protected $fillable = [
@@ -45,18 +45,4 @@ class OspfNbr extends BaseModel
'ospfNbmaNbrPermanence',
'ospfNbrHelloSuppressed',
];
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,7 +25,7 @@
namespace App\Models;
class OspfPort extends BaseModel
class OspfPort extends PortRelatedModel
{
public $timestamps = false;
protected $fillable = [
@@ -55,13 +55,6 @@ class OspfPort extends BaseModel
'ospfIfAuthType',
];
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()

View File

@@ -25,22 +25,8 @@
namespace App\Models;
class Package extends BaseModel
class Package extends DeviceRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'pkg_id';
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->hasOne('App/Models/Device', 'device_id', 'device_id');
}
}

View File

@@ -0,0 +1,43 @@
<?php
/**
* PortRelatedModel.php
*
* -Description-
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2019 Tony Murray
* @author Tony Murray <murraytony@gmail.com>
*/
namespace App\Models;
abstract class PortRelatedModel extends BaseModel
{
// ---- Query scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasPortAccess($query, $user);
}
// ---- Define Relationships ----
public function port()
{
return $this->belongsTo('App\Models\Port', 'port_id', 'port_id');
}
}

View File

@@ -2,17 +2,12 @@
namespace App\Models;
class PortsFdb extends BaseModel
class PortsFdb extends PortRelatedModel
{
protected $table = 'ports_fdb';
protected $primaryKey = 'ports_fdb_id';
public $timestamps = false;
public function scopeHasAccess($query, User $user)
{
return $this->hasPortAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
@@ -20,11 +15,6 @@ class PortsFdb extends BaseModel
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
public function port()
{
return $this->belongsTo('App\Models\Port', 'port_id', 'port_id');
}
public function vlan()
{
return $this->belongsTo('App\Models\Vlan', 'vlan_id', 'vlan_id');

View File

@@ -25,7 +25,7 @@
namespace App\Models;
class PortsNac extends BaseModel
class PortsNac extends PortRelatedModel
{
protected $table = 'ports_nac';
protected $primaryKey = 'ports_nac_id';
@@ -49,20 +49,10 @@ class PortsNac extends BaseModel
'time_elapsed',
];
public function scopeHasAccess($query, User $user)
{
return $this->hasPortAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
public function port()
{
return $this->belongsTo('App\Models\Port', 'port_id', 'port_id');
}
}

View File

@@ -2,7 +2,7 @@
namespace App\Models;
class Processor extends BaseModel
class Processor extends DeviceRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'processor_id';
@@ -32,18 +32,4 @@ class Processor extends BaseModel
return $descr;
}
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
}

View File

@@ -25,13 +25,8 @@
namespace App\Models;
class Pseudowire extends BaseModel
class Pseudowire extends PortRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'pseudowire_id';
public function scopeHasAccess($query, User $user)
{
return $this->hasPortAccess($query, $user);
}
}

View File

@@ -2,7 +2,7 @@
namespace App\Models;
class Sensor extends BaseModel
class Sensor extends DeviceRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'sensor_id';
@@ -60,20 +60,7 @@ class Sensor extends BaseModel
return self::$icons;
}
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
public function events()
{
return $this->morphMany(Eventlog::class, 'events', 'type', 'reference');

View File

@@ -4,7 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
class Service extends BaseModel
class Service extends DeviceRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'service_id';
@@ -57,16 +57,4 @@ class Service extends BaseModel
{
return $query->where('service_disabled', 1);
}
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -2,24 +2,8 @@
namespace App\Models;
class Storage extends BaseModel
class Storage extends DeviceRelatedModel
{
protected $table = 'storage';
protected $primaryKey = 'storage_id';
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
}

View File

@@ -25,23 +25,9 @@
namespace App\Models;
class Syslog extends BaseModel
class Syslog extends DeviceRelatedModel
{
protected $table = 'syslog';
protected $primaryKey = 'seq';
public $timestamps = false;
// ---- Query scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id', 'device_id');
}
}

View File

@@ -2,9 +2,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Vlan extends Model
class Vlan extends DeviceRelatedModel
{
public $timestamps = false;
}

View File

@@ -25,23 +25,9 @@
namespace App\Models;
class Vrf extends BaseModel
class Vrf extends DeviceRelatedModel
{
public $timestamps = false;
protected $table = 'vrfs';
protected $primaryKey = 'vrf_id';
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}

View File

@@ -25,7 +25,7 @@
namespace App\Models;
class WirelessSensor extends BaseModel
class WirelessSensor extends DeviceRelatedModel
{
public $timestamps = false;
protected $primaryKey = 'sensors_id';
@@ -45,18 +45,4 @@ class WirelessSensor extends BaseModel
->get($this->sensor_class, []))
->get('icon', 'signal');
}
// ---- Query Scopes ----
public function scopeHasAccess($query, User $user)
{
return $this->hasDeviceAccess($query, $user);
}
// ---- Define Relationships ----
public function device()
{
return $this->belongsTo('App\Models\Device', 'device_id');
}
}