Support of "disable alerting" in availability map and device summary widget (#11022)

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* merge for last release

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Hide disabled alerting device from avaibility map

* Widget device summary

* Widget device summary

* Widget device summary

* Widget device summary

* Widget device summary

* Widget device summary

* fix color in widget device summary

* fix color in widget device summary

* Commit to restart travis CI

* Commit to restart travis CI
This commit is contained in:
louis-oui
2020-01-15 18:32:29 +01:00
committed by Kevin Krumm
parent 6dfa5ed75a
commit e3156cbef6
11 changed files with 65 additions and 26 deletions

View File

@@ -184,6 +184,8 @@ class ObjectCache
return $query->isIgnored()->count(); return $query->isIgnored()->count();
case 'disabled': case 'disabled':
return $query->isDisabled()->count(); return $query->isDisabled()->count();
case 'disable_notify':
return $query->isDisableNotify()->count();
case 'total': case 'total':
default: default:
return $query->count(); return $query->count();

View File

@@ -50,13 +50,14 @@ class DeviceController extends TableController
'state' => 'nullable|in:0,1,up,down', 'state' => 'nullable|in:0,1,up,down',
'disabled' => 'nullable|in:0,1', 'disabled' => 'nullable|in:0,1',
'ignore' => 'nullable|in:0,1', 'ignore' => 'nullable|in:0,1',
'disable_notify' => 'nullable|in:0,1',
'group' => 'nullable|int', 'group' => 'nullable|int',
]; ];
} }
protected function filterFields($request) protected function filterFields($request)
{ {
return ['os', 'version', 'hardware', 'features', 'type', 'status' => 'state', 'disabled', 'ignore', 'location_id' => 'location']; return ['os', 'version', 'hardware', 'features', 'type', 'status' => 'state', 'disabled', 'disable_notify', 'ignore', 'location_id' => 'location'];
} }
protected function searchFields($request) protected function searchFields($request)
@@ -157,6 +158,8 @@ class DeviceController extends TableController
{ {
if ($device->disabled == 1) { if ($device->disabled == 1) {
return 'blackbg'; return 'blackbg';
} elseif ($device->disable_notify == 1) {
return 'blackbg';
} elseif ($device->ignore == 1) { } elseif ($device->ignore == 1) {
return 'label-default'; return 'label-default';
} elseif ($device->status == 0) { } elseif ($device->status == 0) {

View File

@@ -99,10 +99,10 @@ class AvailabilityMapController extends WidgetController
} }
if (!$settings['show_disabled_and_ignored']) { if (!$settings['show_disabled_and_ignored']) {
$device_query->isActive(); $device_query->isNotDisabled();
} }
$device_query->orderBy($settings['order_by']); $device_query->orderBy($settings['order_by']);
$devices = $device_query->select('devices.device_id', 'hostname', 'sysName', 'status', 'uptime', 'disabled', 'ignore')->get(); $devices = $device_query->select('devices.device_id', 'hostname', 'sysName', 'status', 'uptime', 'disabled', 'disable_notify')->get();
// process status // process status
$uptime_warn = Config::get('uptime_warning', 84600); $uptime_warn = Config::get('uptime_warning', 84600);
@@ -112,9 +112,9 @@ class AvailabilityMapController extends WidgetController
$totals['disabled']++; $totals['disabled']++;
$device->stateName = "disabled"; $device->stateName = "disabled";
$device->labelClass = "blackbg"; $device->labelClass = "blackbg";
} elseif ($device->ignore) { } elseif ($device->disable_notify) {
$totals['ignored']++; $totals['ignored']++;
$device->stateName = "ignored"; $device->stateName = "alert-dis";
$device->labelClass = "label-default"; $device->labelClass = "label-default";
} elseif ($device->status == 1) { } elseif ($device->status == 1) {
if (($device->uptime < $uptime_warn) && ($device->uptime != 0)) { if (($device->uptime < $uptime_warn) && ($device->uptime != 0)) {

View File

@@ -54,7 +54,7 @@ abstract class DeviceSummaryController extends WidgetController
{ {
$data = $this->getSettings(); $data = $this->getSettings();
$data['devices'] = ObjectCache::deviceCounts(['total', 'up', 'down', 'ignored', 'disabled']); $data['devices'] = ObjectCache::deviceCounts(['total', 'up', 'down', 'ignored', 'disabled', 'disable_notify']);
$data['ports'] = $data['summary_errors'] ? $data['ports'] = $data['summary_errors'] ?
ObjectCache::portCounts(['total', 'up', 'down', 'ignored', 'shutdown', 'errored']) : ObjectCache::portCounts(['total', 'up', 'down', 'ignored', 'shutdown', 'errored']) :

View File

@@ -447,6 +447,7 @@ class Device extends BaseModel
return $query->where([ return $query->where([
['status', '=', 1], ['status', '=', 1],
['ignore', '=', 0], ['ignore', '=', 0],
['disable_notify', '=', 0],
['disabled', '=', 0] ['disabled', '=', 0]
]); ]);
} }
@@ -463,6 +464,7 @@ class Device extends BaseModel
{ {
return $query->where([ return $query->where([
['status', '=', 0], ['status', '=', 0],
['disable_notify', '=', 0],
['ignore', '=', 0], ['ignore', '=', 0],
['disabled', '=', 0] ['disabled', '=', 0]
]); ]);
@@ -490,6 +492,21 @@ class Device extends BaseModel
]); ]);
} }
public function scopeIsDisableNotify($query)
{
return $query->where([
['disable_notify', '=', 1]
]);
}
public function scopeIsNotDisabled($query)
{
return $query->where([
['disable_notify', '=', 0],
['disabled', '=', 0]
]);
}
public function scopeCanPing(Builder $query) public function scopeCanPing(Builder $query)
{ {
return $query->where('disabled', 0) return $query->where('disabled', 0)

View File

@@ -83,7 +83,7 @@ if (defined('SHOW_SETTINGS')) {
$common_output[] = ' $common_output[] = '
<div class="form-group"> <div class="form-group">
<div class="col-sm-4"> <div class="col-sm-4">
<label for="show_disabled_and_ignored" class="control-label availability-map-widget-header">Disabled/ignored</label> <label for="show_disabled_and_ignored" class="control-label availability-map-widget-header">Disabled polling/alerting</label>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<select class="form-control" name="show_disabled_and_ignored"> <select class="form-control" name="show_disabled_and_ignored">
@@ -146,7 +146,7 @@ if (defined('SHOW_SETTINGS')) {
$host_up_count = 0; $host_up_count = 0;
$host_warn_count = 0; $host_warn_count = 0;
$host_down_count = 0; $host_down_count = 0;
$host_ignored_count = 0; $host_disable_notify_count = 0;
$host_disabled_count = 0; $host_disabled_count = 0;
$service_up_count = 0; $service_up_count = 0;
$service_warn_count = 0; $service_warn_count = 0;
@@ -169,7 +169,7 @@ if (defined('SHOW_SETTINGS')) {
$in_devices = dbFetchColumn($device_group, [Session::get('group_view')]); $in_devices = dbFetchColumn($device_group, [Session::get('group_view')]);
} }
$sql = 'SELECT `D`.`hostname`, `D`.`sysName`, `D`.`device_id`, `D`.`status`, `D`.`uptime`, `D`.`os`, `D`.`icon`, `D`.`ignore`, `D`.`disabled` FROM `devices` AS `D`'; $sql = 'SELECT `D`.`hostname`, `D`.`sysName`, `D`.`device_id`, `D`.`status`, `D`.`uptime`, `D`.`os`, `D`.`icon`, `D`.`disable_notify`, `D`.`disabled` FROM `devices` AS `D`';
if (!Auth::user()->hasGlobalRead()) { if (!Auth::user()->hasGlobalRead()) {
$sql .= ' , `devices_perms` AS P WHERE D.`device_id` = P.`device_id` AND P.`user_id` = ? AND '; $sql .= ' , `devices_perms` AS P WHERE D.`device_id` = P.`device_id` AND P.`user_id` = ? AND ';
@@ -180,9 +180,9 @@ if (defined('SHOW_SETTINGS')) {
} }
if ($show_disabled_ignored != 1) { if ($show_disabled_ignored != 1) {
$sql .= '`D`.`ignore` = 0 AND `D`.`disabled` = 0 '; $sql .= '`D`.`disable_notify` = 0 AND `D`.`disabled` = 0 ';
} else { } else {
$sql .= '(`D`.`status` IN (0,1,2) OR `D`.`ignore` = 1 OR `D`.`disabled` = 1)'; $sql .= '(`D`.`status` IN (0,1,2) OR `D`.`disable_notify` = 1 OR `D`.`disabled` = 1)';
} }
if (Config::get('webui.availability_map_use_device_groups') != 0 && !empty($in_devices)) { if (Config::get('webui.availability_map_use_device_groups') != 0 && !empty($in_devices)) {
@@ -199,10 +199,10 @@ if (defined('SHOW_SETTINGS')) {
$deviceState = "disabled"; $deviceState = "disabled";
$deviceLabel = "blackbg"; $deviceLabel = "blackbg";
$host_disabled_count++; $host_disabled_count++;
} elseif ($device['ignore'] == '1') { } elseif ($device['disable_notify'] == '1') {
$deviceState = "ignored"; $deviceState = "alert-disabled";
$deviceLabel = "label-default"; $deviceLabel = "label-default";
$host_ignored_count++; $host_disable_notify_count++;
} elseif ($device['status'] == '1') { } elseif ($device['status'] == '1') {
if (($device['uptime'] < Config::get('uptime_warning')) && ($device['uptime'] != 0)) { if (($device['uptime'] < Config::get('uptime_warning')) && ($device['uptime'] != 0)) {
$deviceState = 'warn'; $deviceState = 'warn';
@@ -372,7 +372,7 @@ if (defined('SHOW_SETTINGS')) {
if ($show_disabled_ignored == 1) { if ($show_disabled_ignored == 1) {
$disabled_ignored_header = ' $disabled_ignored_header = '
<span class="label label-default label-font-border label-border">ignored: '.$host_ignored_count.'</span> <span class="label label-default label-font-border label-border">alert-disabled: '.$host_disable_notify_count.'</span>
<span class="label blackbg label-font-border label-border">disabled: '.$host_disabled_count.'</span>'; <span class="label blackbg label-font-border label-border">disabled: '.$host_disabled_count.'</span>';
} }

View File

@@ -165,7 +165,7 @@ if ($format == "graph") {
if (!empty($vars['state'])) { if (!empty($vars['state'])) {
$where .= " AND status= ?"; $where .= " AND status= ?";
$sql_param[] = $state; $sql_param[] = $state;
$where .= " AND disabled='0' AND `ignore`='0'"; $where .= " AND disabled='0' AND `disable_notify`='0'";
$sql_param[] = ''; $sql_param[] = '';
} }
if (!empty($vars['disabled'])) { if (!empty($vars['disabled'])) {
@@ -176,6 +176,10 @@ if ($format == "graph") {
$where .= " AND `ignore`= ?"; $where .= " AND `ignore`= ?";
$sql_param[] = $vars['ignore']; $sql_param[] = $vars['ignore'];
} }
if (!empty($vars['disable_notify'])) {
$where .= " AND `disable_notify`= ?";
$sql_param[] = $vars['disable_notify'];
}
if (!empty($vars['location']) && $vars['location'] == "Unset") { if (!empty($vars['location']) && $vars['location'] == "Unset") {
$location_filter = ''; $location_filter = '';
} }
@@ -344,6 +348,7 @@ if ($format == "graph") {
state: '<?php echo mres($vars['state']); ?>', state: '<?php echo mres($vars['state']); ?>',
disabled: '<?php echo mres($vars['disabled']); ?>', disabled: '<?php echo mres($vars['disabled']); ?>',
ignore: '<?php echo mres($vars['ignore']); ?>', ignore: '<?php echo mres($vars['ignore']); ?>',
disable_notify: '<?php echo mres($vars['disable_notify']); ?>',
group: '<?php echo mres($vars['group']); ?>', group: '<?php echo mres($vars['group']); ?>',
}; };
}, },

View File

@@ -2,7 +2,7 @@
<div class="widget-availability-host"> <div class="widget-availability-host">
<span>@lang('Total hosts')</span> <span>@lang('Total hosts')</span>
@if($show_disabled_and_ignored) @if($show_disabled_and_ignored)
<a href="{{ url('devices/ignore=1') }}"><span class="label label-default label-font-border label-border">@lang('ignored'): {{ $device_totals['ignored'] }}</span></a> <a href="{{ url('devices/disable_notify=1') }}"><span class="label label-default label-font-border label-border">@lang('alert-disabled'): {{ $device_totals['ignored'] }}</span></a>
<a href="{{ url('devices/disabled=1') }}"><span class="label blackbg label-font-border label-border">@lang('disabled'): {{ $device_totals['disabled'] }}</span></a> <a href="{{ url('devices/disabled=1') }}"><span class="label blackbg label-font-border label-border">@lang('disabled'): {{ $device_totals['disabled'] }}</span></a>
@endif @endif
<a href="{{ url('devices/state=up') }}"><span class="label label-success label-font-border label-border">@lang('up'): {{ $device_totals['up'] }}</span></a> <a href="{{ url('devices/state=up') }}"><span class="label label-success label-font-border label-border">@lang('up'): {{ $device_totals['up'] }}</span></a>

View File

@@ -6,7 +6,8 @@
<th><span class="grey">@lang('Total')</span></th> <th><span class="grey">@lang('Total')</span></th>
<th><span class="green">@lang('Up')</span></th> <th><span class="green">@lang('Up')</span></th>
<th><span class="red">@lang('Down')</span></th> <th><span class="red">@lang('Down')</span></th>
<th><span class="grey">@lang('Ignored')</span></th> <th><span class="blue">@lang('Ignore tag')</span></th>
<th><span class="grey">@lang('Alert disabled')</span></th>
<th><span class="black">@lang('Disabled')</span></th> <th><span class="black">@lang('Disabled')</span></th>
@if($summary_errors) @if($summary_errors)
<th class="black">@lang('Errored')</th> <th class="black">@lang('Errored')</th>
@@ -19,7 +20,8 @@
<td><a href="{{ url('devices') }}"><span> {{ $devices['total'] }}</span></a></td> <td><a href="{{ url('devices') }}"><span> {{ $devices['total'] }}</span></a></td>
<td><a href="{{ url('devices/state=up/format=list_detail') }}"><span class="green"> {{ $devices['up'] }}</span></a></td> <td><a href="{{ url('devices/state=up/format=list_detail') }}"><span class="green"> {{ $devices['up'] }}</span></a></td>
<td><a href="{{ url('devices/state=down/format=list_detail') }}"><span class="red"> {{ $devices['down'] }}</span></a></td> <td><a href="{{ url('devices/state=down/format=list_detail') }}"><span class="red"> {{ $devices['down'] }}</span></a></td>
<td><a href="{{ url('devices/ignore=1/format=list_detail') }}"><span class="grey"> {{ $devices['ignored'] }}</span></a></td> <td><a href="{{ url('devices/ignore=1/format=list_detail') }}"><span class="blue"> {{ $devices['ignored'] }}</span></a></td>
<td><a href="{{ url('devices/disable_notify=1/format=list_detail') }}"><span class="grey"> {{ $devices['disable_notify'] }}</span></a></td>
<td><a href="{{ url('devices/disabled=1/format=list_detail') }}"><span class="black"> {{ $devices['disabled'] }}</span></a></td> <td><a href="{{ url('devices/disabled=1/format=list_detail') }}"><span class="black"> {{ $devices['disabled'] }}</span></a></td>
@if($summary_errors) @if($summary_errors)
<td>-</td> <td>-</td>
@@ -30,7 +32,8 @@
<td><a href="{{ url('ports') }}"><span>{{ $ports['total'] }}</span></a></td> <td><a href="{{ url('ports') }}"><span>{{ $ports['total'] }}</span></a></td>
<td><a href="{{ url('ports/format=list_detail/state=up') }}"><span class="green"> {{ $ports['up'] }}</span></a></td> <td><a href="{{ url('ports/format=list_detail/state=up') }}"><span class="green"> {{ $ports['up'] }}</span></a></td>
<td><a href="{{ url('ports/format=list_detail/state=down') }}"><span class="red"> {{ $ports['down'] }}</span></a></td> <td><a href="{{ url('ports/format=list_detail/state=down') }}"><span class="red"> {{ $ports['down'] }}</span></a></td>
<td><a href="{{ url('ports/format=list_detail/ignore=1') }}"><span class="grey"> {{ $ports['ignored'] }}</span></a></td> <td><a href="{{ url('ports/format=list_detail/ignore=1') }}"><span class="blue"> {{ $ports['ignored'] }}</span></a></td>
<td><span class="grey"> NA</span></a></td>
<td><a href="{{ url('ports/format=list_detail/state=admindown') }}"><span class="black"> {{ $ports['shutdown'] }}</span></a></td> <td><a href="{{ url('ports/format=list_detail/state=admindown') }}"><span class="black"> {{ $ports['shutdown'] }}</span></a></td>
@if($summary_errors) @if($summary_errors)
<td><a href="{{ url('ports/format=list_detail/errors=1') }}"><span class="black"> {{ $ports['errored'] }}</span></a></td> <td><a href="{{ url('ports/format=list_detail/errors=1') }}"><span class="black"> {{ $ports['errored'] }}</span></a></td>
@@ -42,7 +45,8 @@
<td><a href="{{ url('services') }}"><span>{{ $services['total'] }}</span></a></td> <td><a href="{{ url('services') }}"><span>{{ $services['total'] }}</span></a></td>
<td><a href="{{ url('services/state=ok/view=details') }}"><span class="green">{{ $services['ok'] }}</span></a></td> <td><a href="{{ url('services/state=ok/view=details') }}"><span class="green">{{ $services['ok'] }}</span></a></td>
<td><a href="{{ url('services/state=critical/view=details') }}"><span class="red"> {{ $services['critical'] }}</span></a></td> <td><a href="{{ url('services/state=critical/view=details') }}"><span class="red"> {{ $services['critical'] }}</span></a></td>
<td><a href="{{ url('services/ignore=1/view=details') }}"><span class="grey"> {{ $services['ignored'] }}</span></a></td> <td><a href="{{ url('services/ignore=1/view=details') }}"><span class="blue"> {{ $services['ignored'] }}</span></a></td>
<td><span class="grey"> NA</span></a></td>
<td><a href="{{ url('services/disabled=1/view=details') }}"><span class="black"> {{ $services['disabled'] }}</span></a></td> <td><a href="{{ url('services/disabled=1/view=details') }}"><span class="black"> {{ $services['disabled'] }}</span></a></td>
@if($summary_errors) @if($summary_errors)
<td>-</td> <td>-</td>

View File

@@ -28,11 +28,19 @@
@endif @endif
</tr> </tr>
<tr> <tr>
<th><span class="grey">@lang('Ignored')</span></th> <th><span class="blue">@lang('Ignored tag')</span></th>
<td><a href="{{ url('devices/format=list_detail/ignore=1') }}"><span class="grey"> {{ $devices['ignored'] }}</span></a></td> <td><a href="{{ url('devices/format=list_detail/ignore=1') }}"><span class="blue"> {{ $devices['ignored'] }}</span></a></td>
<td><a href="{{ url('ports/format=list_detail/ignore=1') }}"><span class="grey"> {{ $ports['ignored'] }}</span></a></td> <td><a href="{{ url('ports/format=list_detail/ignore=1') }}"><span class="blue"> {{ $ports['ignored'] }}</span></a></td>
@if($show_services) @if($show_services)
<td><a href="{{ url('services/view=details/ignore=1') }}"><span class="grey"> {{ $services['ignored'] }}</span></a></td> <td><a href="{{ url('services/view=details/ignore=1') }}"><span class="blue"> {{ $services['ignored'] }}</span></a></td>
@endif
</tr>
<tr>
<th><span class="grey">@lang('Alert disabled')</span></th>
<td><a href="{{ url('devices/format=list_detail/disable_notify=1') }}"><span class="grey"> {{ $devices['disable_notify'] }}</span></a></td>
<td><span class="grey"> NA</span></a></td>
@if($show_services)
<td><span class="grey"> NA</span></a></td>
@endif @endif
</tr> </tr>
<tr> <tr>

View File

@@ -28,7 +28,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="show_disabled_and_ignored-{{ $id }}" class="control-label">@lang('Disabled/ignored')</label> <label for="show_disabled_and_ignored-{{ $id }}" class="control-label">@lang('Disabled polling/alerting')</label>
<select class="form-control" name="show_disabled_and_ignored" id="show_disabled_and_ignored-{{ $id }}"> <select class="form-control" name="show_disabled_and_ignored" id="show_disabled_and_ignored-{{ $id }}">
<option value="1" @if($show_disabled_and_ignored) selected @endif>@lang('Show')</option> <option value="1" @if($show_disabled_and_ignored) selected @endif>@lang('Show')</option>
<option value="0" @unless($show_disabled_and_ignored) selected @endunless>@lang('Hide')</option> <option value="0" @unless($show_disabled_and_ignored) selected @endunless>@lang('Hide')</option>