mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
* service templates - move to blade - jellyfrog fixes - revert get to find and fix discovery lookup * service templates - move to blade - wip * service templates - move to blade - wip * service templates - move to blade - deprecate delete_service_template * service templates - move to blade - deprecate delete_service_template * service templates - move to blade - deprecate remove_service_template * service templates - move to blade - deprecate remove_service_template * service templates - move to blade - fix permisson lookup * service templates - move to blade - fix remove route * service templates - move to blade - fix remove route * service templates - move to blade - fix permisson lookup * service templates - move to blade - fix permisson lookup * service templates - move to blade - fix permisson lookup * service templates - move to blade - fix permisson lookup * service templates - move to blade - fixs * service templates - move to blade - fixes * service templates - move to blade - fixes * service templates - move to blade - fixes * service templates - move to blade - nullable input? * service templates - move to blade - nullable input? * service templates - move to blade - nullable input? * service templates - move to blade - add selected for device group id and type * service templates - move to blade - add selected for device group id and type * service templates - move to blade - add selected for device group id and type * service templates - move to blade - fix discovery response * service templates - move to blade - fix device group index display * service templates - move to blade - add delete to discover_service_template * service templates - move to blade - add discover all button - function foobar * service templates - move to blade - add discover all button - function foobar * service templates - move to blade - add discover all button - function foobar * service templates - move to blade - fixes * service templates - move to blade - fixes * service templates - move to blade - fixes * service templates - move to blade - button fixes * service templates - move to blade - button fixes * service templates - move to blade - button fixes * service templates - move to blade - attempt route fix * service templates - move to blade - attempt route fix * service templates - move to blade - attempt route fix * service templates - move to blade - attempt route fix * service templates - move to blade - fix discovery function * service templates - move to blade - fix discovery function * service templates - move to blade - fix return values - thanks SourceDoctor * service templates - move to blade - attempt route fix * service templates - move to blade - button variable fix * service templates - move to blade - button variable fix * service templates - move to blade - button variable fix * service templates - move to blade - function fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - move to blade - permissions fix * service templates - add initial api - and model permissions fix * service templates - add initial api - discovery too * service templates - add initial api - discovery too * service templates - merge fix * service templates - api fixes * service templates - api fixes * service templates - remove bad fixe * service templates - discover null? :) * service templates - Policy requires Facade? * service templates - Policy requires Facade? * service templates - REVERT Policy requires Facade? * service templates - REVERT Policy requires Facade? * Revert "service templates - REVERT Policy requires Facade?" This reverts commit7752b3e4e5. * service templates - clean up discover api call * service templates - clean up discover api call * service templates - clean up discover api call * service templates - clean up discover api call * service templates - clean up discover api call * service templates - attempt route fix * Revert "service templates - attempt route fix" This reverts commitb48970351e. * service templates - jellyfrog fixes - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template * service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template * Revert "service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template" This reverts commitef93315db5. * Revert "service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template" This reverts commit73af819a60. * Revert "service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template" This reverts commitdd019c3105. * Revert "service templates - jellyfrog fixes - dbchanged - DeviceGroup relates to Service Template" This reverts commit94aaaf7976. * service templates - jellyfrog fixes - DeviceGroup relates to Service Template * service templates - fix permissions * service templates - db service_templates_perms * service templates - fix permissions * service templates - fix permissions * service templates - fix permissions * service templates - fix permissions * service templates - fix permissions * service templates - fix edit.blade missing parameters - still 403 :( * service templates - jellyfrog -fix route and construct * service templates - jellyfrog -fix route and construct * service templates - jellyfrog -fix route and construct * Revert "service templates - jellyfrog -fix route and construct" This reverts commitec1eea7a99. * service templates - jellyfrog -fix routes * service templates - jellyfrog -fix services lookup * service templates - edit blade fixes * service templates - edit blade fixes - service or services or template or serviceTemplate or service_template good luck * service templates - edit blade fixes * service templates - index blade fixes * service templates - discover return fix * service templates - remove return fix * service templates - fix discovery api returns * service templates - fix discovery api returns * service templates - fix discovery api returns * service templates - fix discovery - test * service templates - fix discovery * service templates - fix checkbox integer * service templates - fix checkbox integer * service templates - fix checkbox integer * service templates - fix checkbox integer * service templates - fix checkbox integer * service templates - fix discover all * service templates - fix discover all * service templates - fix discover all * service templates - fix discover all * service templates - fix discover all * service templates - fix discover all * service templates - fix discover all * service templates - fix discover * service templates - fix discover * service templates - fix discover * service templates - fix discover * service templates - fix discover * service templates - move discover/apply to blade - last of the old functions - wip * service templates - move discover/apply to blade - last of the old functions - wip * service templates - move discover/apply to blade - last of the old functions - wip * service templates - change all relevant to template for sanity * service templates - inspection fixes * service templates - inspection fixes * service templates - inspection fixes * service templates - murrant fixes - use createOrUpdate - add obervers - fix function call * service templates - murrant fixes - add ServiceController store - not used * service templates - murrant fixes - add Observers file) * service templates - murrant fixes - correct ServiceController * service templates - murrant fixes - fix observers load * service templates - observer fix * service templates - schedule discovery function call fix, cheeky, is this allowed? * service templates - attempt route fix. * service templates - attempt route fix 2 * service templates - blade route applyall missing url - ie the route lol * service templates - blade route applyall missing url - ie the route lol * service templates - fix routes - bingo! * service templates - fix routes - bingo! * service templates - fix blade missing quote * service templates - jellyfrog fix - remove pluck * service templates - missing template id on service update * service templates - jellyfrog fix - add get * service templates - fix service db defaults / null * service templates - fix service update * service templates - fix service update * service templates - fix service update * service templates - fix service devicegroup change - obsoletes service_template_change in servicesdb * service templates - fix service devicegroup change - obsoletes service_template_change in servicesdb * Add service templates - phpcs fixes - and attemp whereNotIn scope * Add service templates - styleci * Add service templates - styleci * Add service templates - fix notindevicegroup scope * Add service templates - removed service service_template_changed - not required for delete or update * Add service templates - removed service service_template_changed - not required for delete or update * Add service templates - murrant fixes - add protected casts - fix checkbox * Add service templates - fix checkbox - attempt2 * Add service templates - fix checkbox - attempt3 * Add service templates - fix checkbox - attempt3 * Add service templates - fix checkbox - attempt4 * Add service templates - fix delete row selection * Revert "Add service templates - fix delete row selection" This reverts commit4d9e4990f2. * Add service templates - fix delete row selection * Add service templates - fix automatic discovery * Add service templates - fix automatic discovery * Add service templates - checkbox - add hidden input * Add service templates - checkbox - add old value back? * Add service templates - checkbox - fix disabled * Add service templates - checkbox - fix disabled * Add service templates - service fixes - styleci * Add service templates - make devicegroup required * Add service templates - let Disable text wrap * Add service templates - dont allow device group to be deleted when service templates exist * Add service templates - dont allow device group to be deleted when service templates exist * Add service templates - enable multiple device groups - wip * Add service templates - enable multiple device groups - wip * Add service templates - enable multiple device groups - wip * Add service templates - enable multiple device groups - dbschema - wip * Add service templates - enable multiple device groups - db migration - wip * Add service templates - enable multiple device groups - db migration - wip * Add service templates - enable multiple device groups - wip * Add service templates - enable multiple device groups - wip * Add service templates - enable service template Groups - relationships to device AND device groups * Add service templates - styleci fixes * Add service templates - styleci fixes * Add service templates - fixes * Add service templates - fixes * Add service templates - fixes * Add service templates - fixes * Add service templates - fixes * Add service templates - fixes * Add service templates - fixes * Add service templates - fixes * Add service templates - db - primarykey issues * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fix migrations * Add service templates - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - blade view - fixes * Add service templates - misc update for travis build trigger * Add service templates - restrict view to only show device/groups that have templates applied * Add service templates - fix devicegroup update * remove permissions table stuff * Fix schema rollback * fix style * Update ServiceTemplateController.php Co-authored-by: Tony Murray <[email protected]>
185 lines
5.7 KiB
PHP
185 lines
5.7 KiB
PHP
<?php
|
|
/**
|
|
* DeviceGroup.php
|
|
*
|
|
* Dynamic groups of devices
|
|
*
|
|
* 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/>.
|
|
*
|
|
* @link http://librenms.org
|
|
* @copyright 2016 Tony Murray
|
|
* @author Tony Murray <[email protected]>
|
|
*/
|
|
|
|
namespace App\Models;
|
|
|
|
use LibreNMS\Alerting\QueryBuilderFluentParser;
|
|
use Log;
|
|
use Permissions;
|
|
|
|
class DeviceGroup extends BaseModel
|
|
{
|
|
public $timestamps = false;
|
|
protected $fillable = ['name', 'desc', 'type'];
|
|
protected $casts = ['rules' => 'array'];
|
|
|
|
public static function boot()
|
|
{
|
|
parent::boot();
|
|
|
|
static::deleting(function (DeviceGroup $deviceGroup) {
|
|
$deviceGroup->devices()->detach();
|
|
});
|
|
|
|
static::saving(function (DeviceGroup $deviceGroup) {
|
|
if ($deviceGroup->isDirty('rules')) {
|
|
$deviceGroup->rules = $deviceGroup->getParser()->generateJoins()->toArray();
|
|
}
|
|
});
|
|
|
|
static::saved(function (DeviceGroup $deviceGroup) {
|
|
if ($deviceGroup->isDirty('rules')) {
|
|
$deviceGroup->updateDevices();
|
|
}
|
|
});
|
|
}
|
|
|
|
// ---- Helper Functions ----
|
|
|
|
/**
|
|
* Update devices included in this group (dynamic only)
|
|
*/
|
|
public function updateDevices()
|
|
{
|
|
if ($this->type == 'dynamic') {
|
|
$this->devices()->sync(QueryBuilderFluentParser::fromJSON($this->rules)->toQuery()
|
|
->distinct()->pluck('devices.device_id'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update the device groups for the given device or device_id
|
|
*
|
|
* @param Device|int $device
|
|
* @return array
|
|
*/
|
|
public static function updateGroupsFor($device)
|
|
{
|
|
$device = ($device instanceof Device ? $device : Device::find($device));
|
|
if (! $device instanceof Device) {
|
|
// could not load device
|
|
return [
|
|
'attached' => [],
|
|
'detached' => [],
|
|
'updated' => [],
|
|
];
|
|
}
|
|
|
|
$device_group_ids = static::query()
|
|
->with(['devices' => function ($query) {
|
|
$query->select('devices.device_id');
|
|
}])
|
|
->get()
|
|
->filter(function ($device_group) use ($device) {
|
|
/** @var DeviceGroup $device_group */
|
|
if ($device_group->type == 'dynamic') {
|
|
try {
|
|
return $device_group->getParser()
|
|
->toQuery()
|
|
->where('devices.device_id', $device->device_id)
|
|
->exists();
|
|
} catch (\Illuminate\Database\QueryException $e) {
|
|
Log::error("Device Group '$device_group->name' generates invalid query: " . $e->getMessage());
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// for static, if this device is include, keep it.
|
|
return $device_group->devices
|
|
->where('device_id', $device->device_id)
|
|
->isNotEmpty();
|
|
})->pluck('id');
|
|
|
|
return $device->groups()->sync($device_group_ids);
|
|
}
|
|
|
|
/**
|
|
* Get a query builder parser instance from this device group
|
|
*
|
|
* @return QueryBuilderFluentParser
|
|
*/
|
|
public function getParser()
|
|
{
|
|
return ! empty($this->rules) ?
|
|
QueryBuilderFluentParser::fromJson($this->rules) :
|
|
QueryBuilderFluentParser::fromOld($this->pattern);
|
|
}
|
|
|
|
// ---- Query Scopes ----
|
|
|
|
public function scopeHasAccess($query, User $user)
|
|
{
|
|
if ($user->hasGlobalRead()) {
|
|
return $query;
|
|
}
|
|
|
|
return $query->whereIn('id', Permissions::deviceGroupsForUser($user));
|
|
}
|
|
|
|
public function scopeInServiceTemplate($query, $serviceTemplate)
|
|
{
|
|
return $query->whereIn(
|
|
$query->qualifyColumn('id'), function ($query) use ($serviceTemplate) {
|
|
$query->select('device_group_id')
|
|
->from('service_templates_device_group')
|
|
->where('service_template_id', $serviceTemplate);
|
|
}
|
|
);
|
|
}
|
|
|
|
public function scopeNotInServiceTemplate($query, $serviceTemplate)
|
|
{
|
|
return $query->whereNotIn(
|
|
$query->qualifyColumn('id'), function ($query) use ($serviceTemplate) {
|
|
$query->select('device_group_id')
|
|
->from('service_templates_device_group')
|
|
->where('service_template_id', $serviceTemplate);
|
|
}
|
|
);
|
|
}
|
|
|
|
// ---- Define Relationships ----
|
|
|
|
public function devices()
|
|
{
|
|
return $this->belongsToMany(\App\Models\Device::class, 'device_group_device', 'device_group_id', 'device_id');
|
|
}
|
|
|
|
public function services()
|
|
{
|
|
return $this->belongsToMany(\App\Models\Service::class, 'device_group_device', 'device_group_id', 'device_id');
|
|
}
|
|
|
|
public function users()
|
|
{
|
|
return $this->belongsToMany(\App\Models\User::class, 'devices_group_perms', 'device_group_id', 'user_id');
|
|
}
|
|
|
|
public function serviceTemplates()
|
|
{
|
|
return $this->belongsToMany(\App\Models\ServiceTemplate::class, 'service_templates_device_group', 'device_group_id', 'service_template_id');
|
|
}
|
|
}
|