| +-------------------------------------------------------------------------+ | http://www.cacti.net/ | +-------------------------------------------------------------------------+ */ /* allow guest account to see this page */ $guest_account = true; /* initialize cacti environment */ chdir('../../'); include('./include/auth.php'); include_once('./lib/html_tree.php'); include_once('./plugins/syslog/functions.php'); include_once('./plugins/syslog/database.php'); syslog_determine_config(); include(SYSLOG_CONFIG); syslog_connect(); set_default_action(); if (get_request_var('action') == 'ajax_programs') { return get_ajax_programs(true); } elseif (get_request_var('action') == 'ajax_programs_wnone') { return get_ajax_programs(true, true); } elseif (get_request_var('action') == 'ajax_hosts') { print get_ajax_hosts(); exit; } elseif (get_request_var('action') == 'save') { save_settings(); exit; } $title = __('Syslog Viewer', 'syslog'); $trimvals = array( '1024' => __('All Text', 'syslog'), '30' => __('%d Chars', 30, 'syslog'), '50' => __('%d Chars', 50, 'syslog'), '75' => __('%d Chars', 75, 'syslog'), '100' => __('%d Chars', 100, 'syslog'), '150' => __('%d Chars', 150, 'syslog'), '300' => __('%d Chars', 300, 'syslog') ); /* set the default tab */ get_filter_request_var('tab', FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^([a-zA-Z]+)$/'))); load_current_session_value('tab', 'sess_syslog_tab', 'syslog'); $current_tab = get_request_var('tab'); /* validate the syslog post/get/request information */; if ($current_tab != 'stats') { syslog_request_validation($current_tab); } if (isset_request_var('refresh')) { $refresh['seconds'] = get_request_var('refresh'); $refresh['page'] = $config['url_path'] . 'plugins/syslog/syslog.php?header=false&tab=' . $current_tab; $refresh['logout'] = 'false'; set_page_refresh($refresh); } /* draw the tabs */ /* display the main page */ if (isset_request_var('export')) { syslog_export($current_tab); /* clear output so reloads wont re-download */ unset_request_var('output'); } else { general_header(); syslog_display_tabs($current_tab); if ($current_tab == 'current') { syslog_view_alarm(); } elseif ($current_tab == 'stats') { syslog_statistics(); } else { syslog_messages($current_tab); } bottom_footer(); } $_SESSION['sess_nav_level_cache'] = array(); function get_ajax_hosts() { include(SYSLOG_CONFIG); $ac_rows = read_config_option('autocomplete_rows'); if ($ac_rows <= 0) { $ac_rows = 100; } $term = '%' . get_nfilter_request_var('term') . '%'; if (syslog_db_table_exists('host', false)) { $hosts = syslog_db_fetch_assoc_prepared("SELECT DISTINCT sh.host_id, sh.host, h.id FROM `" . $syslogdb_default . "`.`syslog_hosts` AS sh LEFT JOIN host AS h ON sh.host = h.hostname OR sh.host = h.description OR sh.host LIKE substring_index(h.hostname, '.', 1) OR sh.host LIKE substring_index(h.description, '.', 1) WHERE sh.host LIKE ? OR h.description LIKE ? ORDER BY host LIMIT $ac_rows", array($term, $term)); } else { $hosts = syslog_db_fetch_assoc_prepared("SELECT DISTINCT sh.host_id, sh.host, '0' AS id FROM `" . $syslogdb_default . "`.`syslog_hosts` AS sh WHERE sh.host LIKE ? ORDER BY host LIMIT $ac_rows", array($term)); } if (cacti_sizeof($hosts)) { foreach ($hosts as $host) { if (!empty($host['id'])) { $class = get_device_leaf_class($host['id']); } else { $class = 'deviceUp'; } $rhosts[$host['host_id']] = array( 'host' => $host['host'], 'host_id' => $host['id'], 'class' => $class ); } return json_encode($rhosts); } else { return json_encode(array()); } } function syslog_display_tabs($current_tab) { global $config; /* present a tabbed interface */ $tabs_syslog['syslog'] = __('System Logs', 'syslog'); if (read_config_option('syslog_statistics') == 'on') { $tabs_syslog['stats'] = __('Statistics', 'syslog'); } $tabs_syslog['alerts'] = __('Alert Logs', 'syslog'); /* if they were redirected to the page, let's set that up */ if (!isempty_request_var('id') || $current_tab == 'current') { $current_tab = 'current'; } load_current_session_value('id', 'sess_syslog_id', '0'); if (!isempty_request_var('id') || $current_tab == 'current') { $tabs_syslog['current'] = __('Selected Alert', 'syslog'); } /* draw the tabs */ print "
\n"; } function syslog_view_alarm() { global $config; include(SYSLOG_CONFIG); print ""; print ""; print "
" . __('Syslog Alert View', 'syslog') . "
\n"; $html = syslog_db_fetch_cell('SELECT html FROM `' . $syslogdb_default . '`.`syslog_logs` WHERE seq=' . get_request_var('id')); print trim($html, "' "); print '
'; exit; } /** function syslog_statistics() * This function paints a table of summary statistics for syslog * messages by host, facility, priority, and time range. */ function syslog_statistics() { global $title, $rows, $config; include(SYSLOG_CONFIG); /* ================= input validation and session storage ================= */ $filters = array( 'rows' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1', ), 'refresh' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_config_option('syslog_refresh'), ), 'timespan' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '300', ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'rfilter' => array( 'filter' => FILTER_VALIDATE_IS_REGEX, 'pageset' => true, 'default' => '' ), 'host' => array( 'filter' => FILTER_VALIDATE_IS_NUMERIC_LIST, 'pageset' => true, 'default' => '', ), 'facility' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '', ), 'priority' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '', ), 'program' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'sort_column' => array( 'filter' => FILTER_CALLBACK, 'default' => 'host', 'options' => array('options' => 'sanitize_search_string') ), 'sort_direction' => array( 'filter' => FILTER_CALLBACK, 'default' => 'ASC', 'options' => array('options' => 'sanitize_search_string') ) ); validate_store_request_vars($filters, 'sess_syslogs'); /* ================= input validation ================= */ html_start_box(__('Syslog Statistics Filter', 'syslog'), '100%', '', '3', 'center', ''); syslog_stats_filter(); html_end_box(); $sql_where = ''; $sql_groupby = ''; if (get_request_var('rows') == -1) { $rows = read_config_option('num_rows_table'); } elseif (get_request_var('rows') == -2) { $rows = 999999; } else { $rows = get_request_var('rows'); } $records = get_stats_records($sql_where, $sql_groupby, $rows); $rows_query_string = "SELECT COUNT(*) FROM `" . $syslogdb_default . "`.`syslog_statistics` AS ss $sql_where $sql_groupby"; $total_rows = syslog_db_fetch_cell('SELECT COUNT(*) FROM ('. $rows_query_string . ') as temp'); $nav = html_nav_bar('syslog.php?tab=stats', MAX_DISPLAY_PAGES, get_request_var_request('page'), $rows, $total_rows, 4, __('Messages', 'syslog'), 'page', 'main'); print $nav; html_start_box('', '100%', '', '3', 'center', ''); $display_text = array( 'host' => array( 'display' => __('Device Name', 'syslog'), 'sort' => 'ASC', 'align' => 'left' ), 'facility' => array( 'display' => __('Facility', 'syslog'), 'sort' => 'ASC', 'align' => 'left' ), 'priority' => array( 'display' => __('Priority', 'syslog'), 'sort' => 'ASC', 'align' => 'left' ), 'program' => array( 'display' => __('Program', 'syslog'), 'sort' => 'ASC', 'align' => 'left' ), 'insert_time' => array( 'display' => __('Date', 'syslog'), 'sort' => 'DESC', 'align' => 'right' ), 'records' => array( 'display' => __('Records', 'syslog'), 'sort' => 'DESC', 'align' => 'right' ) ); html_header_sort($display_text, get_request_var('sort_column'), get_request_var('sort_direction')); if (get_request_var('timespan') < 3600) { $date_format = 'Y-m-d H:i'; } elseif (get_request_var('timespan') < 86400) { $date_format = 'Y-m-d H:00'; } else { $date_format = 'Y-m-d 00:00'; } if (cacti_sizeof($records)) { $i = 0; foreach ($records as $r) { $time = date($date_format, strtotime($r['insert_time'])); form_alternate_row('line' . $i); print '' . (get_request_var('host') != '-2' ? $r['host']:'-') . ''; print '' . (get_request_var('facility') != '-2' ? ucfirst($r['facility']):'-') . ''; print '' . (get_request_var('priority') != '-2' ? ucfirst($r['priority']):'-') . ''; print '' . (get_request_var('program') != '-2' ? ucfirst($r['program']):'-') . ''; //print '' . $r['insert_time'] . ''; print '' . $time . ''; print '' . number_format_i18n($r['records'], -1) . ''; form_end_row(); $i++; } } else { print "" . __('No Syslog Statistics Found', 'syslog') . ""; } html_end_box(false); if (cacti_sizeof($records)) { print $nav; } } function get_stats_records(&$sql_where, &$sql_groupby, $rows) { include(SYSLOG_CONFIG); /* form the 'where' clause for our main sql query */ if (!isempty_request_var('rfilter')) { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . "sh.host RLIKE '" . get_request_var('rfilter') . "' OR spr.program RLIKE '" . get_request_var('rfilter') . "'"; } if (get_request_var('host') == '-2') { // Do nothing } elseif (get_request_var('host') != '-1' && get_request_var('host') != '') { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . 'ss.host_id=' . get_request_var('host'); $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'host_id'; } else { $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'host_id'; } if (get_request_var('facility') == '-2') { // Do nothing } elseif (get_request_var('facility') != '-1' && get_request_var('facility') != '') { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . 'ss.facility_id=' . get_request_var('facility'); $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'facility_id'; } else { $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'facility_id'; } if (get_request_var('priority') == '-2') { // Do nothing } elseif (get_request_var('priority') != '-1' && get_request_var('priority') != '') { $sql_where .= ($sql_where == '' ? 'WHERE ': ' AND ') . 'ss.priority_id=' . get_request_var('priority'); $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'priority_id'; } else { $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'priority_id'; } if (get_request_var('program') == '-2') { // Do nothing } elseif (get_request_var('program') != '-1' && get_request_var('program') != '') { $sql_where .= ($sql_where == '' ? 'WHERE ': ' AND ') . 'ss.program_id=' . get_request_var('program'); $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'program_id'; } else { $sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'program_id'; } if (get_request_var('timespan') != '-1') { $sql_groupby .= ($sql_groupby != '' ? ', ':'') . ' UNIX_TIMESTAMP(insert_time) DIV ' . get_request_var('timespan'); } $sql_order = get_order_string(); if (!isset_request_var('export')) { $sql_limit = ' LIMIT ' . ($rows*(get_request_var('page')-1)) . ',' . $rows; } else { $sql_limit = ' LIMIT 10000'; } if ($sql_groupby != '') { $sql_groupby = 'GROUP BY ' . $sql_groupby; } $time = 'FROM_UNIXTIME(TRUNCATE(UNIX_TIMESTAMP(insert_time)/' . get_request_var('timespan') . ',0)*' . get_request_var('timespan') . ') AS insert_time'; $query_sql = "SELECT sh.host, sf.facility, sp.priority, spr.program, records, insert_time FROM ( SELECT host_id, facility_id, priority_id, program_id, sum(records) AS records, $time FROM `" . $syslogdb_default . "`.`syslog_statistics` AS ss $sql_where $sql_groupby ) AS ss LEFT JOIN `" . $syslogdb_default . "`.`syslog_facilities` AS sf ON ss.facility_id=sf.facility_id LEFT JOIN `" . $syslogdb_default . "`.`syslog_priorities` AS sp ON ss.priority_id=sp.priority_id LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` AS spr ON ss.program_id=spr.program_id LEFT JOIN `" . $syslogdb_default . "`.`syslog_hosts` AS sh ON ss.host_id=sh.host_id $sql_order $sql_limit"; //cacti_log(str_replace("\n", "", $query_sql)); return syslog_db_fetch_assoc($query_sql); } function syslog_stats_filter() { global $config, $item_rows; include(SYSLOG_CONFIG); ?>
'> '>
' onChange='applyFilter()'>
'>
array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => read_user_setting('syslog_rows', '-1', $force) ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '' ), 'removal' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_user_setting('syslog_removal', '1', $force) ), 'predefined_timespan' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => read_user_setting('default_timespan', GT_LAST_DAY, $force) ), 'predefined_timeshift' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => read_user_setting('default_timeshift', GTS_1_DAY, $force) ), 'refresh' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_user_setting('syslog_refresh', read_config_option('syslog_refresh'), $force) ), 'trimval' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_user_setting('syslog_trimval', '75', $force) ), 'enabled' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'host' => array( 'filter' => FILTER_VALIDATE_IS_NUMERIC_LIST, 'pageset' => true, 'default' => '', ), 'efacility' => array( 'filter' => FILTER_CALLBACK, 'pageset' => true, 'default' => read_user_setting('syslog_efacility', '-1', $force), 'options' => array('options' => 'sanitize_search_string') ), 'epriority' => array( 'filter' => FILTER_CALLBACK, 'pageset' => true, 'default' => read_user_setting('syslog_epriority', '-1', $force), 'options' => array('options' => 'sanitize_search_string') ), 'eprogram' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => read_user_setting('syslog_eprogram', '-1', $force), ), 'rfilter' => array( 'filter' => FILTER_VALIDATE_IS_REGEX, 'pageset' => true, 'default' => '' ), 'date1' => array( 'filter' => FILTER_CALLBACK, 'pageset' => true, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'date2' => array( 'filter' => FILTER_CALLBACK, 'pageset' => true, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'sort_column' => array( 'filter' => FILTER_CALLBACK, 'default' => 'logtime', 'options' => array('options' => 'sanitize_search_string') ), 'sort_direction' => array( 'filter' => FILTER_CALLBACK, 'default' => 'DESC', 'options' => array('options' => 'sanitize_search_string') ) ); validate_store_request_vars($filters, 'sess_sl_' . $current_tab); /* ================= input validation ================= */ // Modify session and request variables based upon span/shift/settings set_shift_span($shift_span, 'sess_sl_' . $current_tab); api_plugin_hook_function('syslog_request_val'); if (isset_request_var('host')) { $_SESSION['sess_syslog_' . $current_tab . '_hosts'] = get_nfilter_request_var('host'); } elseif (isset($_SESSION['sess_syslog_' . $current_tab . '_hosts'])) { set_request_var('host', $_SESSION['sess_syslog_' . $current_tab . '_hosts']); } else { set_request_var('host', '-1'); } } function set_shift_span($shift_span, $session_prefix) { global $graph_timeshifts; if ($shift_span == 'span' || $shift_span === false) { $span = array(); // Calculate the timespan $first_weekdayid = read_user_setting('first_weekdayid'); get_timespan($span, time(), get_request_var('predefined_timespan'), $first_weekdayid); // Save the settings for next page refresh set_request_var('date1', date('Y-m-d H:i:s', $span['begin_now'])); set_request_var('date2', date('Y-m-d H:i:s', $span['end_now'])); // We don't want any date saved in the session kill_session_var($session_prefix . '_date1'); kill_session_var($session_prefix . '_date2'); set_request_var('custom', false); } elseif ($shift_span == 'shift') { $span = array(); $span['current_value_date1'] = get_request_var('date1'); $span['current_value_date2'] = get_request_var('date2'); $span['begin_now'] = strtotime(get_request_var('date1')); $span['end_now'] = strtotime(get_request_var('date2')); if (isset_request_var('shift_right')) { $direction = '+'; } elseif (isset_request_var('shift_left')) { $direction = '-'; } else { $direction = '+'; } $timeshift = $graph_timeshifts[get_request_var('predefined_timeshift')]; // Calculate the new date1 and date2 shift_time($span, $direction, $timeshift); // Save the settings for next page refresh set_request_var('date1', date('Y-m-d H:i:s', $span['begin_now'])); set_request_var('date2', date('Y-m-d H:i:s', $span['end_now'])); // Save the dates in the session variable for page refresh $_SESSION[$session_prefix . '_date1'] = get_request_var('date1'); $_SESSION[$session_prefix . '_date2'] = get_request_var('date2'); set_request_var('custom', true); } elseif ($shift_span == 'custom') { set_request_var('custom', true); } } function get_syslog_messages(&$sql_where, $rows, $tab) { global $sql_where, $hostfilter, $hostfilter_log, $current_tab, $syslog_incoming_config; include(SYSLOG_CONFIG); $sql_where = ''; if ($tab == 'alerts') { if (get_request_var('host') == 0) { // Show all hosts } else { $hosts = explode(',', get_request_var('host')); $thold_pos = array_search('-1', $hosts, true); if ($thold_pos !== false) { unset($hosts[$thold_pos]); } if (sizeof($hosts)) { sql_hosts_where($tab); if ($hostfilter_log != '') { $sql_where .= 'WHERE ' . $hostfilter_log; } } if ($thold_pos !== false) { $ids = array_rekey( syslog_db_fetch_assoc('SELECT id FROM `' . $syslogdb_default . '`.`syslog_alert` WHERE method = 1'), 'id', 'id' ); if (cacti_sizeof($ids)) { $sql_where .= ($sql_where == '' ? 'WHERE ':' OR ') . 'alert_id IN (' . implode(', ', $ids) . ')'; } elseif ($sql_where == '') { $sql_where .= 'WHERE 0 = 1'; } } } } elseif ($tab == 'syslog') { if (!isempty_request_var('host')) { sql_hosts_where($tab); if ($hostfilter != '') { $sql_where .= 'WHERE ' . $hostfilter; } } } $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . "logtime BETWEEN '" . get_request_var('date1') . "' AND '" . get_request_var('date2') . "'"; if (isset_request_var('id') && $current_tab == 'current') { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . 'sa.id=' . get_request_var('id'); } if (!isempty_request_var('rfilter')) { if ($tab == 'syslog') { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . "message RLIKE '" . get_request_var('rfilter') . "'"; } else { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . "logmsg RLIKE '" . get_request_var('rfilter') . "'"; } } if (get_request_var('eprogram') != '-1') { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . 'syslog.program_id = ' . db_qstr(get_request_var('eprogram')); } if (get_request_var('efacility') != '-1') { $sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . 'syslog.facility_id = ' . db_qstr(get_request_var('efacility')); } if (isset_request_var('epriority') && get_request_var('epriority') != '-1') { $priorities = ''; switch(get_request_var('epriority')) { case '0': $priorities = ' = 0'; break; case '1o': $priorities = ' = 1'; break; case '1': $priorities = ' <= 1'; break; case '2o': $priorities = ' = 2'; break; case '2': $priorities = ' <= 2'; break; case '3o': $priorities = ' = 3'; break; case '3': $priorities = ' <= 3'; break; case '4o': $priorities = ' = 4'; break; case '4': $priorities = ' <= 4'; break; case '5o': $priorities = ' = 5'; break; case '5': $priorities = ' <= 5'; break; case '6o': $priorities = ' = 6'; break; case '6': $priorities = ' <= 6'; break; case '7': $priorities = ' = 7'; break; } $sql_where .= ($sql_where == '' ? 'WHERE ': ' AND ') . 'syslog.priority_id ' . $priorities; } $sql_where = api_plugin_hook_function('syslog_sqlwhere', $sql_where); $sql_order = get_order_string(); if (!isset_request_var('export')) { $sql_limit = ' LIMIT ' . ($rows*(get_request_var('page')-1)) . ',' . $rows; } else { $sql_limit = ' LIMIT 10000'; } if ($tab == 'syslog') { if (get_request_var('removal') == '-1') { $query_sql = "SELECT syslog.*, syslog_programs.program, 'main' AS mtype FROM `" . $syslogdb_default . "`.`syslog` LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` ON syslog.program_id=syslog_programs.program_id " . $sql_where . " $sql_order $sql_limit"; } elseif (get_request_var('removal') == '1') { $query_sql = "(SELECT syslog.*, syslog_programs.program, 'main' AS mtype FROM `" . $syslogdb_default . "`.`syslog` AS syslog LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` ON syslog.program_id=syslog_programs.program_id " . $sql_where . " ) UNION (SELECT syslog.*, syslog_programs.program, 'remove' AS mtype FROM `" . $syslogdb_default . "`.`syslog_removed` AS syslog LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` ON syslog.program_id=syslog_programs.program_id " . $sql_where . ") $sql_order $sql_limit"; } else { $query_sql = "SELECT syslog.*, syslog_programs.program, 'remove' AS mtype FROM `" . $syslogdb_default . "`.`syslog_removed` AS syslog LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` AS syslog_programs ON syslog.program_id=syslog_programs.program_id " . $sql_where . " $sql_order $sql_limit"; } } else { $query_sql = "SELECT syslog.*, sf.facility, sp.priority, spr.program, sa.name, sa.severity FROM `" . $syslogdb_default . "`.`syslog_logs` AS syslog LEFT JOIN `" . $syslogdb_default . "`.`syslog_facilities` AS sf ON syslog.facility_id=sf.facility_id LEFT JOIN `" . $syslogdb_default . "`.`syslog_priorities` AS sp ON syslog.priority_id=sp.priority_id LEFT JOIN `" . $syslogdb_default . "`.`syslog_alert` AS sa ON syslog.alert_id=sa.id LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` AS spr ON syslog.program_id=spr.program_id " . $sql_where . " $sql_order $sql_limit"; } //print $query_sql; return syslog_db_fetch_assoc($query_sql); } function syslog_filter($sql_where, $tab) { global $config, $graph_timespans, $graph_timeshifts, $reset_multi, $page_refresh_interval, $item_rows, $trimvals; include(SYSLOG_CONFIG); $unprocessed = syslog_db_fetch_cell("SELECT COUNT(*) FROM `" . $syslogdb_default . "`.`syslog_incoming`"); if (isset_request_var('date1')) { $filter_text = __esc(' [ Start: \'%s\' to End: \'%s\', Unprocessed Messages: %s ]', get_request_var('date1'), get_request_var('date2'), $unprocessed, 'syslog'); } else { $filter_text = __esc('[ Unprocessed Messages: %s ]', $unprocessed, 'syslog'); } ?>
'> ' class='calendar fa fa-calendar-alt' id='startDate'> '> ' class='calendar fa fa-calendar-alt' id='endDate'> ' onclick='timeshiftFilterLeft()' class='shiftArrow fa fa-backward'> ' onclick='timeshiftFilterRight()' class='shiftArrow fa fa-forward'> '> ' title=''> ' title=''> ' title=''> ' title=''> ' title=''> ' title=''>
' onChange='applyFilter()'>
'>
'; print "" . __('Emergency', 'syslog') . ''; print "" . __('Critical', 'syslog') . ''; print "" . __('Alert', 'syslog') . ''; print "" . __('Error', 'syslog') . ''; print "" . __('Warning', 'syslog') . ''; print "" . __('Notice', 'syslog') . ''; print "" . __('Info', 'syslog') . ''; print "" . __('Debug', 'syslog') . ''; print ''; html_end_box(false); } /** function syslog_log_legend() * This function displays the foreground and background colors for the syslog log legend */ function syslog_log_legend() { global $disabled_color, $notmon_color, $database_default; html_start_box('', '100%', '', '3', 'center', ''); print ''; print "" . __('Critical', 'syslog') . ''; print "" . __('Warning', 'syslog') . ''; print "" . __('Notice', 'syslog') . ''; print "" . __('Informational', 'syslog') . ''; print ''; html_end_box(false); } /** function syslog_messages() * This is the main page display function in Syslog. Displays all the * syslog messages that are relevant to Syslog. */ function syslog_messages($tab = 'syslog') { global $sql_where, $hostfilter, $severities; global $config, $syslog_incoming_config, $reset_multi, $syslog_levels; include(SYSLOG_CONFIG); include('./include/global_arrays.php'); /* force the initial timespan to be 30 minutes for performance reasons */ if (!isset($_SESSION['sess_syslog_init'])) { $_SESSION['sess_current_timespan'] = 1; $_SESSION['sess_syslog_init'] = 1; } $url_curr_page = get_browser_query_string(); $sql_where = ''; if (get_request_var('rows') == -1) { $rows = read_config_option('num_rows_table'); } elseif (get_request_var('rows') == -2) { $rows = 999999; } else { $rows = get_request_var('rows'); } $syslog_messages = get_syslog_messages($sql_where, $rows, $tab); syslog_filter($sql_where, $tab); if ($tab == 'syslog') { if (get_request_var('removal') == 1) { $total_rows = syslog_db_fetch_cell("SELECT SUM(totals) FROM ( SELECT count(*) AS totals FROM `" . $syslogdb_default . "`.`syslog` AS syslog $sql_where UNION SELECT count(*) AS totals FROM `" . $syslogdb_default . "`.`syslog_removed` AS syslog $sql_where ) AS rowcount"); } elseif (get_request_var('removal') == -1) { $total_rows = syslog_db_fetch_cell("SELECT count(*) FROM `" . $syslogdb_default . "`.`syslog` AS syslog $sql_where"); } else { $total_rows = syslog_db_fetch_cell("SELECT count(*) FROM `" . $syslogdb_default . "`.`syslog_removed` AS syslog $sql_where"); } } else { $total_rows = syslog_db_fetch_cell("SELECT count(*) FROM `" . $syslogdb_default . "`.`syslog_logs` AS syslog LEFT JOIN `" . $syslogdb_default . "`.`syslog_facilities` AS sf ON syslog.facility_id=sf.facility_id LEFT JOIN `" . $syslogdb_default . "`.`syslog_priorities` AS sp ON syslog.priority_id=sp.priority_id LEFT JOIN `" . $syslogdb_default . "`.`syslog_alert` AS sa ON syslog.alert_id=sa.id LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` AS spr ON syslog.program_id=spr.program_id " . $sql_where); } if ($tab == 'syslog') { if (api_plugin_user_realm_auth('syslog_alerts.php')) { $display_text = array( 'nosortt' => array(__('Actions', 'syslog'), 'ASC'), 'logtime' => array(__('Date', 'syslog'), 'ASC'), 'host_id' => array(__('Device', 'syslog'), 'ASC'), 'program' => array(__('Program', 'syslog'), 'ASC'), 'message' => array(__('Message', 'syslog'), 'ASC'), 'facility_id' => array(__('Facility', 'syslog'), 'ASC'), 'priority_id' => array(__('Priority', 'syslog'), 'ASC')); } else { $display_text = array( 'logtime' => array(__('Date', 'syslog'), 'ASC'), 'host_id' => array(__('Device', 'syslog'), 'ASC'), 'program' => array(__('Program', 'syslog'), 'ASC'), 'message' => array(__('Message', 'syslog'), 'ASC'), 'facility_id' => array(__('Facility', 'syslog'), 'ASC'), 'priority_id' => array(__('Priority', 'syslog'), 'ASC')); } $nav = html_nav_bar("syslog.php?tab=$tab", MAX_DISPLAY_PAGES, get_request_var_request('page'), $rows, $total_rows, cacti_sizeof($display_text), __('Messages', 'syslog'), 'page', 'main'); print $nav; html_start_box('', '100%', '', '3', 'center', ''); html_header_sort($display_text, get_request_var('sort_column'), get_request_var('sort_direction')); $hosts = array_rekey( syslog_db_fetch_assoc('SELECT host_id, host FROM `' . $syslogdb_default . '`.`syslog_hosts`'), 'host_id', 'host' ); $facilities = array_rekey( syslog_db_fetch_assoc('SELECT facility_id, facility FROM `' . $syslogdb_default . '`.`syslog_facilities`'), 'facility_id', 'facility' ); $priorities = array_rekey( syslog_db_fetch_assoc('SELECT priority_id, priority FROM `' . $syslogdb_default . '`.`syslog_priorities`'), 'priority_id', 'priority' ); if (cacti_sizeof($syslog_messages)) { foreach ($syslog_messages as $sm) { $title = html_escape($sm['message']); syslog_row_color($sm['priority_id'], $sm['message']); if (api_plugin_user_realm_auth('syslog_alerts.php')) { $url = ''; if ($sm['mtype'] == 'main') { $url .= ""; $url .= ""; } form_selectable_cell($url, $sm['seq'], '', 'left'); } form_selectable_cell($sm['logtime'], $sm['seq'], '', 'left'); form_selectable_cell(isset($hosts[$sm['host_id']]) ? $hosts[$sm['host_id']]:__('Unknown', 'syslog'), $sm['seq'], '', 'left'); form_selectable_cell($sm['program'], $sm['seq'], '', 'left'); form_selectable_cell(filter_value(title_trim($sm[$syslog_incoming_config['textField']], get_request_var_request('trimval')), get_request_var('rfilter')), $sm['seq'], '', 'left syslogMessage'); form_selectable_cell(isset($facilities[$sm['facility_id']]) ? $facilities[$sm['facility_id']]:__('Unknown', 'syslog'), $sm['seq'], '', 'left'); form_selectable_cell(isset($priorities[$sm['priority_id']]) ? $priorities[$sm['priority_id']]:__('Unknown', 'syslog'), $sm['seq'], '', 'left'); form_end_row(); } } else { print "" . __('No Syslog Messages', 'syslog') . ""; } html_end_box(false); if (cacti_sizeof($syslog_messages)) { print $nav; } syslog_syslog_legend(); ?> array('display' => __('Alert Name', 'syslog'), 'sort' => 'ASC', 'align' => 'left'), 'severity' => array('display' => __('Severity', 'syslog'), 'sort' => 'ASC', 'align' => 'left'), 'logtime' => array('display' => __('Date', 'syslog'), 'sort' => 'ASC', 'align' => 'left'), 'logmsg' => array('display' => __('Message', 'syslog'), 'sort' => 'ASC', 'align' => 'left'), 'count' => array('display' => __('Count', 'syslog'), 'sort' => 'ASC', 'align' => 'right'), 'host' => array('display' => __('Device', 'syslog'), 'sort' => 'ASC', 'align' => 'right'), 'facility_id' => array('display' => __('Facility', 'syslog'), 'sort' => 'ASC', 'align' => 'right'), 'priority_id' => array('display' => __('Priority', 'syslog'), 'sort' => 'ASC', 'align' => 'right') ); $nav = html_nav_bar("syslog.php?tab=$tab", MAX_DISPLAY_PAGES, get_request_var_request('page'), $rows, $total_rows, cacti_sizeof($display_text), __('Alert Log Rows', 'syslog'), 'page', 'main'); print $nav; html_start_box('', '100%', '', '3', 'center', ''); html_header_sort($display_text, get_request_var('sort_column'), get_request_var('sort_direction')); if (cacti_sizeof($syslog_messages)) { foreach ($syslog_messages as $log) { $title = html_escape($log['logmsg']); syslog_log_row_color($log['severity'], $title); form_selectable_cell(filter_value($log['name'] != '' ? $log['name']:__('Alert Removed', 'syslog'), get_request_var('rfilter'), $config['url_path'] . 'plugins/syslog/syslog.php?id=' . $log['seq'] . '&tab=current'), $log['seq'], '', 'left'); form_selectable_cell(isset($severities[$log['severity']]) ? $severities[$log['severity']]:__('Unknown', 'syslog'), $log['seq'], '', 'left'); form_selectable_cell($log['logtime'], $log['seq'], '', 'left'); form_selectable_cell(filter_value(title_trim($log['logmsg'], get_request_var_request('trimval')), get_request_var('rfilter')), $log['seq'], '', 'syslogMessage left'); form_selectable_cell($log['count'], $log['seq'], '', 'right'); form_selectable_cell($log['host'], $log['seq'], '', 'right'); form_selectable_cell(ucfirst($log['facility']), $log['seq'], '', 'right'); form_selectable_cell(ucfirst($log['priority']), $log['seq'], '', 'right'); form_end_row(); } } else { print "" . __('No Alert Log Messages', 'syslog') . ""; } html_end_box(false); if (cacti_sizeof($syslog_messages)) { print $nav; } syslog_log_legend(); } } function save_settings() { global $current_tab; // syslog_request_validation($current_tab); $variables = array( 'rows', 'refresh', 'removal', 'trimval', 'efacility', 'priority', 'eprogram', 'predefined_timespan', 'predefined_timeshift', ); foreach($variables as $v) { if (isset_request_var($v)) { // Accommodate predefined if (strpos($v, 'predefined') !== false) { $v = str_replace('predefined_', 'default_', $v); set_user_setting($v, get_request_var($v)); } else { set_user_setting('syslog_' . $v, get_request_var($v)); } } } syslog_request_validation($current_tab, true); } function html_program_filter($program_id = '-1', $none_entry = '', $action = 'ajax_programs', $call_back = 'applyFilter', $sql_where = '') { if (strpos($call_back, '()') === false) { $call_back .= '()'; } if ($program_id > 0) { $program = syslog_db_fetch_cell("SELECT program FROM syslog_programs WHERE program_id = $program_id"); } elseif ($program_id == -2) { $program = __('None', 'syslog'); } else { $program = __('All Programs', 'syslog'); } print ''; print __('Program', 'syslog'); print ''; print ''; if ($none_entry) { $none_entry = __('None', 'syslog'); } else { $none_entry = ''; } syslog_form_callback( 'eprogram', 'SELECT DISTINCT program_id, program FROM syslog_programs AS spr ORDER BY program', 'program', 'program_id', $action, $program_id, $program, $none_entry, __('All Programs', 'syslog'), '', $call_back ); print ''; } function get_ajax_programs($include_any = true, $include_none = false, $sql_where = '') { $return = array(); $term = get_filter_request_var('term', FILTER_CALLBACK, array('options' => 'sanitize_search_string')); if ($term != '') { $sql_where .= ($sql_where != '' ? ' AND ' : 'WHERE ') . "program LIKE '%$term%'"; } if (get_request_var('term') == '') { if ($include_any) { $return[] = array( 'label' => __('All Programs', 'syslog'), 'value' => __('All Programs', 'syslog'), 'id' => '-1' ); } if ($include_none) { $return[] = array( 'label' => __('None', 'syslog'), 'value' => __('None', 'syslog'), 'id' => '-2' ); } } $programs = syslog_db_fetch_assoc("SELECT program_id, program FROM syslog_programs $sql_where ORDER BY program LIMIT 20"); if (cacti_sizeof($programs)) { foreach($programs as $program) { $return[] = array( 'label' => $program['program'], 'value' => $program['program'], 'id' => $program['program_id'] ); } } print json_encode($return); } function syslog_form_callback($form_name, $classic_sql, $column_display, $column_id, $callback, $previous_id, $previous_value, $none_entry, $default_value, $class = '', $on_change = '') { if ($previous_value == '') { $previous_value = $default_value; } if (isset($_SESSION['sess_error_fields'])) { if (!empty($_SESSION['sess_error_fields'][$form_name])) { $class .= ($class != '' ? ' ':'') . 'txtErrorTextBox'; unset($_SESSION['sess_error_fields'][$form_name]); } } if (isset($_SESSION['sess_field_values'])) { if (!empty($_SESSION['sess_field_values'][$form_name])) { $previous_value = $_SESSION['sess_field_values'][$form_name]; } } if ($class != '') { $class = " class='$class' "; } $theme = get_selected_theme(); if ($theme == 'classic' || read_config_option('autocomplete') > 0) { print "'; } else { if (empty($previous_id) && $previous_value == '') { $previous_value = $none_entry; } print ""; print ""; print ""; print ""; print ""; if (!empty($none_entry) && empty($previous_value)) { $previous_value = $none_entry; } print ""; print ""; ?>