From 5a2f2497bbb1925354655d46d83ae3810e6c8553 Mon Sep 17 00:00:00 2001 From: Heath Barnhart <44616159+h-barnhart@users.noreply.github.com> Date: Sat, 6 Jul 2019 10:58:06 -0500 Subject: [PATCH] Allow setting Service Ignore and Disable in UI (#10334) * Added disable and ignore checkboxes to services modal * Updated add_services function to set disabled field * Modified check-services.php respect service_disable value * Minor code change for consistency in new_service.inc.php * Removed unneeded includes --- check-services.php | 34 ++++++-------------- includes/html/forms/create-service.inc.php | 6 ++-- includes/html/forms/parse-service.inc.php | 4 ++- includes/html/modal/new_service.inc.php | 36 +++++++++++++++++----- includes/services.inc.php | 4 +-- 5 files changed, 48 insertions(+), 36 deletions(-) diff --git a/check-services.php b/check-services.php index d5cb740463..905dad0b4b 100755 --- a/check-services.php +++ b/check-services.php @@ -61,35 +61,18 @@ $sql = 'SELECT D.*,S.*,attrib_value FROM `devices` AS D' .' ORDER by D.device_id DESC;'; foreach (dbFetchRows($sql) as $service) { - // Run the polling function if the associated device is up, "Disable ICMP Test" option is not enabled, + // Run the polling function if service is enabled and the associated device is up, "Disable ICMP Test" option is not enabled, // or service hostname/ip is different from associated device - if ($service['status'] == 1 || ($service['status'] == 0 && $service['status_reason'] === 'snmp') || + if (!$service['service_disabled'] && ($service['status'] == 1 || ($service['status'] == 0 && $service['status_reason'] === 'snmp') || $service['attrib_value'] === 'true' || ($service['service_ip'] !== $service['hostname'] && - $service['service_ip'] !== inet6_ntop($service['ip']) )) { - // Mark service check as enabled if it was disabled previously because device was down - if ($service['service_disabled']) { - dbUpdate( - array('service_disabled' => 0), - 'services', - '`service_id` = ?', - array($service['service_id']) - ); - } + $service['service_ip'] !== inet6_ntop($service['ip']) ))) { poll_service($service); $polled_services++; } else { - d_echo("\nService check - ".$service['service_id']."\nSkipping service check because device " - .$service['hostname']." is down due to icmp.\n"); - // Mark service check as disabled while device is down and log to eventlog that service check is skipped, - // but only if it's not already marked as disabled if (!$service['service_disabled']) { - dbUpdate( - array('service_disabled' => 1), - 'services', - '`service_id` = ?', - array($service['service_id']) - ); - log_event( + d_echo("\nService check - ".$service['service_id']."\nSkipping service check because device " + .$service['hostname']." is down due to icmp.\n"); + Log::event( "Service check - {$service['service_desc']} ({$service['service_id']}) - Skipping service check because device {$service['hostname']} is down due to icmp", $service['device_id'], @@ -97,9 +80,12 @@ foreach (dbFetchRows($sql) as $service) { 4, $service['service_id'] ); + } else { + d_echo("\nService check - ".$service['service_id']."\nSkipping service check because device " + .$service['service_type']." is disabled.\n"); } } -} //end service foreach +} $poller_end = microtime(true); $poller_run = ($poller_end - $poller_start); diff --git a/includes/html/forms/create-service.inc.php b/includes/html/forms/create-service.inc.php index af9086fdef..ab821c72ec 100644 --- a/includes/html/forms/create-service.inc.php +++ b/includes/html/forms/create-service.inc.php @@ -23,11 +23,13 @@ $type = $vars['stype']; $desc = $vars['desc']; $ip = $vars['ip']; $param = $vars['param']; +$ignore = isset($vars['ignore']) ? 1 : 0; +$disabled = isset($vars['disabled']) ? 1 : 0; $device_id = $vars['device_id']; if (is_numeric($service_id) && $service_id > 0) { // Need to edit. - $update = array('service_desc' => $desc, 'service_ip' => $ip, 'service_param' => $param); + $update = array('service_desc' => $desc, 'service_ip' => $ip, 'service_param' => $param, 'service_ignore' => $ignore, 'service_disabled' => $disabled); if (is_numeric(edit_service($update, $service_id))) { $status = array('status' =>0, 'message' => 'Modified Service: '.$service_id.': '.$type.''); } else { @@ -35,7 +37,7 @@ if (is_numeric($service_id) && $service_id > 0) { } } else { // Need to add. - $service_id = add_service($device_id, $type, $desc, $ip, $param); + $service_id = add_service($device_id, $type, $desc, $ip, $param, $ignore, $disabled); if ($service_id == false) { $status = array('status' =>1, 'message' => 'ERROR: Failed to add Service: '.$type.''); } else { diff --git a/includes/html/forms/parse-service.inc.php b/includes/html/forms/parse-service.inc.php index d0cdd6368d..c4d1103d7e 100644 --- a/includes/html/forms/parse-service.inc.php +++ b/includes/html/forms/parse-service.inc.php @@ -27,7 +27,9 @@ if (is_numeric($service_id) && $service_id > 0) { 'stype' => $service[0]['service_type'], 'ip' => $service[0]['service_ip'], 'desc' => $service[0]['service_desc'], - 'param' => $service[0]['service_param'] + 'param' => $service[0]['service_param'], + 'ignore' => $service[0]['service_ignore'], + 'disabled' => $service[0]['service_disabled'] ); header('Content-Type: application/json'); diff --git a/includes/html/modal/new_service.inc.php b/includes/html/modal/new_service.inc.php index 17d026ab9d..86e1aca3d3 100644 --- a/includes/html/modal/new_service.inc.php +++ b/includes/html/modal/new_service.inc.php @@ -26,7 +26,6 @@ if (LegacyAuth::user()->hasGlobalAdmin()) { } } } - ?> -
+
-
+
-
+
'/>
-
+
- +
-
+
+ +
+ +
+
+
+ +
+ +
+
+
@@ -93,6 +104,8 @@ $('#create-service').on('hide.bs.modal', function (event) { $('#ip').val(''); $('#desc').val(''); $('#param').val(''); + $('#ignore').val(''); + $('#disabled').val(''); }); // on-load @@ -112,8 +125,17 @@ $('#create-service').on('show.bs.modal', function (e) { $('#ip').val(output['ip']); $('#desc').val(output['desc']); $('#param').val(output['param']); + $('#ignore').val(output['ignore']); + $('#disabled').val(output['disabled']); + if ($('#ignore').attr('value') == 1) { + $('#ignore').prop("checked", true); + } + if ($('#disabled').attr('value') == 1) { + $('#disabled').prop("checked", true); + } } }); + }); // on-submit diff --git a/includes/services.inc.php b/includes/services.inc.php index d88e6c70dd..8ddefc490d 100644 --- a/includes/services.inc.php +++ b/includes/services.inc.php @@ -35,7 +35,7 @@ function get_service_status($device = null) return $service_count; } -function add_service($device, $type, $desc, $ip = 'localhost', $param = "", $ignore = 0) +function add_service($device, $type, $desc, $ip = 'localhost', $param = "", $ignore = 0, $disabled = 0) { if (!is_array($device)) { @@ -46,7 +46,7 @@ function add_service($device, $type, $desc, $ip = 'localhost', $param = "", $ign $ip = $device['hostname']; } - $insert = array('device_id' => $device['device_id'], 'service_ip' => $ip, 'service_type' => $type, 'service_changed' => array('UNIX_TIMESTAMP(NOW())'), 'service_desc' => $desc, 'service_param' => $param, 'service_ignore' => $ignore, 'service_status' => 3, 'service_message' => 'Service not yet checked', 'service_ds' => '{}'); + $insert = array('device_id' => $device['device_id'], 'service_ip' => $ip, 'service_type' => $type, 'service_changed' => array('UNIX_TIMESTAMP(NOW())'), 'service_desc' => $desc, 'service_param' => $param, 'service_ignore' => $ignore, 'service_status' => 3, 'service_message' => 'Service not yet checked', 'service_ds' => '{}', 'servcie_disabled' => $disabled); return dbInsert($insert, 'services'); }