Error: This component requires Nagios XI 5.6.0 or later."; } register_component("report_notifications_disabled", array( COMPONENT_NAME => "report_notifications_disabled", COMPONENT_AUTHOR => "hedenface", COMPONENT_DESCRIPTION => $desc, COMPONENT_TITLE => "Notifications Disabled Report", COMPONENT_VERSION => "1.0.0", COMPONENT_DATE => "05/22/2023", COMPONENT_CONFIGFUNCTION => "report_notifications_disabled_config", ) ); if (!report_notifications_disabled_check_version()) { return; } register_callback(CALLBACK_MENUS_INITIALIZED, 'report_notifications_disabled_component_addmenu'); } function report_notifications_disabled_check_version() { if (function_exists('get_product_release')) { if (get_product_release() >= 5600) { return true; } } return false; } function report_notifications_disabled_component_addmenu() { $menu_section = find_menu_item(MENU_REPORTS, "menu-reports-nagiosxi", "id"); if ($menu_section == null) { return false; } $order = grab_array_var($menu_section, "order", ""); $new_order = $order + 0.1; if ($new_order < 0) { return false; } add_menu_item(MENU_REPORTS, array( "type" => "link", "title" => "Notifications Disabled", "id" => "menu-reports-nagiosxi", "order" => $new_order, "opts" => array( "href" => get_component_url_base("report_notifications_disabled") . "/index.php", ) )); add_menu_item(MENU_REPORTS, array( "type" => "linkspacer", "id" => "menu-reports-notifications-disabled-report-spacer", "order" => $new_order + 0.1 )); } /**** Component Configuration Functions ****/ function report_notifications_disabled_config($mode = "", $inargs, &$outargs, &$result) { $result = 0; $output = ""; switch ($mode) { case COMPONENT_CONFIGMODE_GETSETTINGSHTML: $settings_raw = get_option("report_notifications_disabled_options"); if ($settings_raw == "") { $settings = array(); } else { $settings = unserialize($settings_raw); } // initial values $ignore_host_list = grab_array_var($settings, "ignore_host_list", report_notifications_disabled_default_hosts_to_ignore()); $ignore_service_list = grab_array_var($settings, "ignore_service_list", report_notifications_disabled_default_services_to_ignore()); // just to make sure.. if (empty($ignore_host_list)) { $ignore_host_list = report_notifications_disabled_default_hosts_to_ignore(); } if (empty($ignore_service_list)) { $ignore_service_list = report_notifications_disabled_default_services_to_ignore(); } // values passed to us $ignore_host_list = grab_array_var($inargs, "ignore_host_list", $ignore_host_list); $ignore_service_list = grab_array_var($inargs, "ignore_service_list", $ignore_service_list); $output = '

Use the Notifications Disabled Report configuration to adjust specific Services to ignore

Notifications Disabled Report
'; break; case COMPONENT_CONFIGMODE_SAVESETTINGS: // get variables $ignore_host_list = grab_array_var($inargs, "ignore_host_list", report_notifications_disabled_default_hosts_to_ignore()); $ignore_service_list = grab_array_var($inargs, "ignore_service_list", report_notifications_disabled_default_services_to_ignore()); // just to make sure.. if (empty($ignore_host_list)) { $ignore_host_list = report_notifications_disabled_default_hosts_to_ignore(); } if (empty($ignore_service_list)) { $ignore_service_list = report_notifications_disabled_default_services_to_ignore(); } // save settings $settings = array( "ignore_host_list" => $ignore_host_list, "ignore_service_list" => $ignore_service_list, ); set_option("report_notifications_disabled_options", serialize($settings)); break; default: break; } return $output; } function report_notifications_ignore_host_list() { $settings_raw = get_option("report_notifications_disabled_options"); if ($settings_raw == "") { $settings = array(); } else { $settings = unserialize($settings_raw); } $ignore_host_list = grab_array_var($settings, "ignore_host_list", report_notifications_disabled_default_hosts_to_ignore()); if (empty($ignore_host_list)) { $ignore_host_list = report_notifications_disabled_default_hosts_to_ignore(); } return $ignore_host_list; } function report_notifications_ignore_service_list() { $settings_raw = get_option("report_notifications_disabled_options"); if ($settings_raw == "") { $settings = array(); } else { $settings = unserialize($settings_raw); } $ignore_service_list = grab_array_var($settings, "ignore_service_list", report_notifications_disabled_default_services_to_ignore()); if (empty($ignore_service_list)) { $ignore_service_list = report_notifications_disabled_default_services_to_ignore(); } return $ignore_service_list; } /**** Report Functions ****/ function report_notifications_disabled_get_hosts() { $all_hosts = get_data_host_status(array("notifications_enabled" => 0)); $hosts = array(); foreach ($all_hosts as $host) { if (in_array($host["host_name"], split(",", report_notifications_ignore_host_list()))) { continue; } $audit = report_notifications_disabled_search_audit_logs(REPORT_NOTIFICATIONS_DISABLED_HOW_FAR_BACK_IN_DAYS, $host["host_name"]); if ($audit === false || count($audit) == 0) { $user = "No user found"; $when = ""; } else { $user = $audit["user"]; $when = $audit["log_time"]; } $hosts[] = array( "host_name" => $host["host_name"], "user" => $user, "when" => $when, ); } return $hosts; } function report_notifications_disabled_get_services() { $all_services = get_data_service_status(array("notifications_enabled" => 0)); $services = array(); foreach ($all_services as $service) { if (in_array($service["host_name"], split(",", report_notifications_ignore_host_list()))) { continue; } if (in_array($service["service_description"], split(",", report_notifications_ignore_service_list()))) { continue; } $audit = report_notifications_disabled_search_audit_logs(REPORT_NOTIFICATIONS_DISABLED_HOW_FAR_BACK_IN_DAYS, $service["host_name"], $service["service_description"]); if ($audit === false || count($audit) == 0) { $user = "No user found"; $when = ""; } else { $user = $audit["user"]; $when = $audit["log_time"]; } $services[] = array( "host_name" => $service["host_name"], "service_description" => $service["service_description"], "user" => $user, "when" => $when, ); } return $services; } function report_notifications_disabled_search_audit_logs($how_far_back_in_days, $host_name, $service_description = null) { // we start with the last 24 hours, then go back as far as specified in the function call $starttime = time() - (24 * 60 * 60); $endtime = time(); for ($i = 0; $i < $how_far_back_in_days; $i++) { if (empty($service_description) == true) { $audit_logs = report_notifications_disabled_get_auditlog(array( "starttime" => $starttime, "endtime" => $endtime, "type" => AUDITLOGTYPE_INFO, "message" => "lk:Submitted a command to Nagios Core: DISABLE_HOST_NOTIFICATIONS;$host_name", )); } else { $audit_logs = report_notifications_disabled_get_auditlog(array( "starttime" => $starttime, "endtime" => $endtime, "type" => AUDITLOGTYPE_INFO, "message" => "lk:Submitted a command to Nagios Core: DISABLE_SVC_NOTIFICATIONS;$host_name;$service_description", )); } // we want the latest if (count($audit_logs) >= 1) { return $audit_logs[0]; } // otherwise, we adjust starttime and endtime $starttime -= (24 * 60 * 60); $endtime -= (24 * 60 * 60); } // if we have nothing, return false return false; } // taken from get_auditlog_xml_output (without the xml part, along with some adjustments) // no functionality exists natively for returning auditlog as an array function report_notifications_disabled_get_auditlog($request_args) { global $sqlquery; global $db_tables; global $request; // WE HAVE TO MUNGE THINGS HERE BECAUSE THE TIMESTAMPS CONTAINS COLONS AND WILL GET MESSED UP BY THE NORMAL SQL LIMITING LOGIC... $sqlmods = ""; // by default, only show last 24 hours worth of logs $starttime = grab_array_var($request_args, "starttime", time() - (24 * 60 * 60)); unset($request_args["starttime"]); $sqlmods .= " AND " . $db_tables[DB_NAGIOSXI]["auditlog"] . ".log_time >= '" . get_datetime_string($starttime, DT_SQL_DATE_TIME) . "'"; // optional end time $endtime = grab_array_var($request_args, "endtime", ""); if ($endtime != "") { $sqlmods .= " AND " . $db_tables[DB_NAGIOSXI]["auditlog"] . ".log_time <= '" . get_datetime_string($endtime, DT_SQL_DATE_TIME) . "'"; } $audit_log = array(); // generate query $fieldmap = array( "auditlog_id" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".auditlog_id", "log_time" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".log_time", "source" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".source", "user" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".user", "type" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".type", "message" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".message", "ip_address" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".ip_address", "details" => $db_tables[DB_NAGIOSXI]["auditlog"] . ".details", ); $args = array( "sql" => $sqlquery['GetAuditLog'] . $sqlmods, "fieldmap" => $fieldmap, "useropts" => $request_args, // FOR NON-BACKEND-CALLS ); $sql = generate_sql_query(DB_NAGIOSXI, $args); if (!($rs = exec_sql_query(DB_NAGIOSXI, $sql))) { handle_backend_db_error(DB_NAGIOSXI); } else { while (!$rs->EOF) { $typestr = intval($rs->fields["type"]); switch ($typestr) { case AUDITLOGTYPE_ADD: $typestr = "ADD"; break; case AUDITLOGTYPE_DELETE: $typestr = "DELETE"; break; case AUDITLOGTYPE_MODIFY: $typestr = "MODIFY"; break; case AUDITLOGTYPE_CHANGE: $typestr = "CHANGE"; break; case AUDITLOGTYPE_SECURITY: $typestr = "SECURITY"; break; case AUDITLOGTYPE_INFO: $typestr = "INFO"; break; case AUDITLOGTYPE_OTHER: $typestr = "OTHER"; break; default: break; } $audit_log[] = array( "id" => get_xml_db_field_val($rs, "auditlog_id"), "log_time" => get_xml_db_field_val($rs, "log_time"), "source" => get_xml_db_field_val($rs, "source"), "user" => get_xml_db_field_val($rs, "user"), "type" => get_xml_db_field_val($rs, "type"), "typestr" => $typestr, "message" => get_xml_db_field_val($rs, "message"), "details" => get_xml_db_field_val($rs, "details"), "ip_address" => get_xml_db_field_val($rs, "ip_address"), ); $rs->MoveNext(); } } return $audit_log; }