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 <murraytony@gmail.com>
379 lines
13 KiB
PHP
379 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Device;
|
|
use App\Models\DeviceGroup;
|
|
use App\Models\Service;
|
|
use App\Models\ServiceTemplate;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Validation\Rule;
|
|
use LibreNMS\Alerting\QueryBuilderFilter;
|
|
use LibreNMS\Services;
|
|
use Toastr;
|
|
|
|
class ServiceTemplateController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->authorizeResource(ServiceTemplate::class, 'template');
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function index()
|
|
{
|
|
//$this->authorize('manage', ServiceTemplate::class);
|
|
|
|
return view(
|
|
'service-template.index', [
|
|
'service_templates' => ServiceTemplate::orderBy('name')->withCount('devices')->withCount('groups')->get(),
|
|
'groups' => DeviceGroup::orderBy('name')->has('serviceTemplates')->get(),
|
|
'devices' => Device::orderBy('hostname')->has('serviceTemplates')->get(),
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return \Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function create()
|
|
{
|
|
return view(
|
|
'service-template.create', [
|
|
'template' => new ServiceTemplate(),
|
|
'service_templates' => ServiceTemplate::orderBy('name')->get(),
|
|
'services' => Services::list(),
|
|
'filters' => json_encode(new QueryBuilderFilter('group')),
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$this->validate(
|
|
$request, [
|
|
'name' => 'required|string|unique:service_templates',
|
|
'groups' => 'array',
|
|
'groups.*' => 'integer',
|
|
'devices' => 'array',
|
|
'devices.*' => 'integer',
|
|
'type' => 'string',
|
|
'dtype' => 'required|in:dynamic,static',
|
|
'dgtype' => 'required|in:dynamic,static',
|
|
'drules' => 'json|required_if:dtype,dynamic',
|
|
'dgrules' => 'json|required_if:dgtype,dynamic',
|
|
'param' => 'nullable|string',
|
|
'ip' => 'nullable|string',
|
|
'desc' => 'nullable|string',
|
|
'changed' => 'integer',
|
|
'disabled' => 'integer',
|
|
'ignore' => 'integer',
|
|
]
|
|
);
|
|
|
|
$template = ServiceTemplate::make(
|
|
$request->only(
|
|
[
|
|
'name',
|
|
'type',
|
|
'dtype',
|
|
'dgtype',
|
|
'drules',
|
|
'dgrules',
|
|
'param',
|
|
'ip',
|
|
'desc',
|
|
'changed',
|
|
'disabled',
|
|
'ignore',
|
|
]
|
|
)
|
|
);
|
|
$template->drules = json_decode($request->drules);
|
|
$template->dgrules = json_decode($request->dgrules);
|
|
$template->save();
|
|
|
|
if ($request->dtype == 'static') {
|
|
$template->devices()->sync($request->devices);
|
|
}
|
|
if ($request->dgtype == 'static') {
|
|
$template->groups()->sync($request->groups);
|
|
}
|
|
Toastr::success(__('Service Template :name created', ['name' => $template->name]));
|
|
|
|
return redirect()->route('services.templates.index');
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function show(ServiceTemplate $template)
|
|
{
|
|
return redirect(url('/services/templates/' . $template->id));
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function edit(ServiceTemplate $template)
|
|
{
|
|
return view(
|
|
'service-template.edit', [
|
|
'template' => $template,
|
|
'filters' => json_encode(new QueryBuilderFilter('group')),
|
|
'services' => Services::list(),
|
|
]
|
|
//
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function update(Request $request, ServiceTemplate $template)
|
|
{
|
|
$this->validate(
|
|
$request, [
|
|
'name' => [
|
|
'required',
|
|
'string',
|
|
Rule::unique('service_templates')->where(
|
|
function ($query) use ($template) {
|
|
$query->where('id', '!=', $template->id);
|
|
}
|
|
),
|
|
],
|
|
'dtype' => 'required|in:dynamic,static',
|
|
'drules' => 'json|required_if:dtype,dynamic',
|
|
'devices' => 'array',
|
|
'devices.*' => 'integer',
|
|
'dgtype' => 'required|in:dynamic,static',
|
|
'dgrules' => 'json|required_if:dgtype,dynamic',
|
|
'groups' => 'array',
|
|
'groups.*' => 'integer',
|
|
'type' => 'string',
|
|
'param' => 'nullable|string',
|
|
'ip' => 'nullable|string',
|
|
'desc' => 'nullable|string',
|
|
'changed' => 'integer',
|
|
'disabled' => 'integer',
|
|
'ignore' => 'integer',
|
|
]
|
|
);
|
|
|
|
$template->fill(
|
|
$request->only(
|
|
[
|
|
'name',
|
|
'type',
|
|
'dtype',
|
|
'dgtype',
|
|
'drules',
|
|
'dgrules',
|
|
'param',
|
|
'ip',
|
|
'desc',
|
|
'changed',
|
|
'ignore',
|
|
'disabled',
|
|
]
|
|
)
|
|
);
|
|
|
|
$devices_updated = false;
|
|
if ($template->dtype == 'static') {
|
|
// sync device_ids from input
|
|
$updated = $template->devices()->sync($request->get('devices', []));
|
|
// check for attached/detached/updated
|
|
$devices_updated = array_sum(array_map(function ($device_ids) {
|
|
return count($device_ids);
|
|
}, $updated)) > 0;
|
|
} else {
|
|
$template->drules = json_decode($request->drules);
|
|
}
|
|
|
|
$device_groups_updated = false;
|
|
if ($template->dgtype == 'static') {
|
|
// sync device_group_ids from input
|
|
$updated = $template->groups()->sync($request->get('groups', []));
|
|
// check for attached/detached/updated
|
|
$device_groups_updated = array_sum(array_map(function ($device_group_ids) {
|
|
return count($device_group_ids);
|
|
}, $updated)) > 0;
|
|
} else {
|
|
$template->dgrules = json_decode($request->dgrules);
|
|
}
|
|
|
|
if ($template->isDirty() || $devices_updated || $device_groups_updated) {
|
|
try {
|
|
if ($template->save() || $devices_updated || $device_groups_updated) {
|
|
Toastr::success(__('Service Template :name updated', ['name' => $template->name]));
|
|
} else {
|
|
Toastr::error(__('Failed to save'));
|
|
|
|
return redirect()->back()->withInput();
|
|
}
|
|
} catch (\Illuminate\Database\QueryException $e) {
|
|
return redirect()->back()->withInput()->withErrors([
|
|
'drules' => __('Rules resulted in invalid query: ') . $e->getMessage(),
|
|
'dgrules' => __('Rules resulted in invalid query: ') . $e->getMessage(),
|
|
]);
|
|
}
|
|
} else {
|
|
Toastr::info(__('No changes made'));
|
|
}
|
|
|
|
return redirect()->route('services.templates.index');
|
|
}
|
|
|
|
/**
|
|
* Apply specified Service Template to Device Groups.
|
|
*
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function applyDeviceGroups(ServiceTemplate $template)
|
|
{
|
|
foreach (DeviceGroup::inServiceTemplate($template->id)->get() as $device_group) {
|
|
foreach (Device::inDeviceGroup($device_group->id)->get() as $device) {
|
|
$device->services()->updateOrCreate(
|
|
[
|
|
'service_template_id' => $template->id,
|
|
],
|
|
[
|
|
'service_name' => $template->name,
|
|
'service_type' => $template->type,
|
|
'service_template_id' => $template->id,
|
|
'service_param' => $template->param,
|
|
'service_ip' => $template->ip,
|
|
'service_desc' => $template->desc,
|
|
'service_disabled' => $template->disabled,
|
|
'service_ignore' => $template->ignore,
|
|
]
|
|
);
|
|
}
|
|
}
|
|
$msg = __('Services for Template :name have been updated', ['name' => $template->name]);
|
|
|
|
return response($msg, 200);
|
|
}
|
|
|
|
/**
|
|
* Apply specified Service Template to Devices.
|
|
*
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function applyDevices(ServiceTemplate $template)
|
|
{
|
|
foreach (Device::inServiceTemplate($template->id)->get() as $device) {
|
|
$device->services()->updateOrCreate(
|
|
[
|
|
'service_template_id' => $template->id,
|
|
],
|
|
[
|
|
'service_name' => $template->name,
|
|
'service_type' => $template->type,
|
|
'service_template_id' => $template->id,
|
|
'service_param' => $template->param,
|
|
'service_ip' => $template->ip,
|
|
'service_desc' => $template->desc,
|
|
'service_disabled' => $template->disabled,
|
|
'service_ignore' => $template->ignore,
|
|
]
|
|
);
|
|
}
|
|
$msg = __('Services for Template :name have been updated', ['name' => $template->name]);
|
|
|
|
return response($msg, 200);
|
|
}
|
|
|
|
/**
|
|
* Apply all Service Templates.
|
|
*
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function applyAll()
|
|
{
|
|
foreach (ServiceTemplate::all() as $template) {
|
|
ServiceTemplateController::apply($template);
|
|
}
|
|
$msg = __('All Service Templates have been applied');
|
|
|
|
return response($msg, 200);
|
|
}
|
|
|
|
/**
|
|
* Apply specified Service Template.
|
|
*
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function apply(ServiceTemplate $template)
|
|
{
|
|
ServiceTemplateController::applyDevices($template);
|
|
ServiceTemplateController::applyDeviceGroups($template);
|
|
|
|
// remove any remaining services no longer in the correct device group
|
|
foreach (Device::notInServiceTemplate($template->id)->notInDeviceGroup($template->groups)->get() as $device) {
|
|
Service::where('device_id', $device->device_id)->where('service_template_id', $template->id)->delete();
|
|
}
|
|
$msg = __('All Service Templates have been applied');
|
|
|
|
return response($msg, 200);
|
|
}
|
|
|
|
/**
|
|
* Remove specified Service Template.
|
|
*
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function remove(ServiceTemplate $template)
|
|
{
|
|
Service::where('service_template_id', $template->id)->delete();
|
|
|
|
$msg = __('All Service Templates have been applied');
|
|
|
|
return response($msg, 200);
|
|
}
|
|
|
|
/**
|
|
* Destroy the specified resource from storage.
|
|
*
|
|
* @param \App\Models\ServiceTemplate $template
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\View\View
|
|
*/
|
|
public function destroy(ServiceTemplate $template)
|
|
{
|
|
Service::where('service_template_id', $template->id)->delete();
|
|
$template->delete();
|
|
|
|
$msg = __('Service Template :name deleted, Services removed', ['name' => $template->name]);
|
|
|
|
return response($msg, 200);
|
|
}
|
|
}
|