|
+-------------------------------------------------------------------------+
| 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 "\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);
?>
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');
}
?>
';
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 "';
if (!empty($none_entry)) {
print "$none_entry ";
}
$form_data = syslog_db_fetch_assoc($classic_sql);
html_create_list($form_data, $column_display, $column_id, html_escape($previous_id));
print ' ';
} else {
if (empty($previous_id) && $previous_value == '') {
$previous_value = $none_entry;
}
print "";
print " ";
?>