0 AND dtr.local_data_id = ?', array($local_data_id)), 'id', 'name'); } function clog_purge_logfile() { global $config; $logfile = read_config_option('path_cactilog'); $logbase = basename($logfile); if ($logfile == '') { $logfile = $config['base_path'] . '/log/cacti.log'; } if (get_nfilter_request_var('filename') != '') { if (strpos(get_nfilter_request_var('filename'), $logbase) === false) { raise_message('clog_invalid'); header('Location: ' . get_current_page() . '?filename=' . $logbase); exit(0); } } $purgefile = dirname($logfile) . '/' . get_nfilter_request_var('filename'); if (strstr($purgefile, $logfile) === false) { raise_message('clog_invalid'); header('Location: ' . get_current_page() . '?header=false'); exit(0); } if (file_exists($purgefile)) { if (is_writable($purgefile)) { if ($logfile != $purgefile) { unlink($purgefile); raise_message('clog_remove'); } else { $timestamp = date('Y-m-d H:i:s'); $log_fh = fopen($logfile, 'w'); fwrite($log_fh, "$timestamp - WEBUI: Cacti Log Cleared from Web Management Interface\n"); fclose($log_fh); raise_message('clog_purged'); } cacti_log('NOTE: Cacti Log file ' . $purgefile . ', Removed by user ' . get_username($_SESSION['sess_user_id']), false, 'WEBUI'); } else { raise_message('clog_permissions'); } } else { raise_message('clog_missing'); } } function clog_view_logfile() { global $config; $exclude_reported = false; $clogAdmin = clog_admin(); $logfile = read_config_option('path_cactilog'); $logbase = basename($logfile); if (isset_request_var('filename')) { $requestedFile = dirname($logfile) . '/' . basename(get_nfilter_request_var('filename')); if (file_exists($requestedFile)) { $logfile = $requestedFile; } } elseif ($logfile == '') { $logfile = $config['base_path'] . '/log/cacti.log'; } if (get_nfilter_request_var('filename') != '') { if (strpos(get_nfilter_request_var('filename'), $logbase) === false) { raise_message('clog_invalid'); header('Location: ' . get_current_page() . '?filename=' . $logbase); exit(0); } } /* ================= input validation and session storage ================= */ $filters = array( 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'tail_lines' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_config_option('num_rows_log'), 'pageset' => true ), 'message_type' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '-1', 'pageset' => true ), 'refresh' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_config_option('log_refresh_interval') ), 'reverse' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'rfilter' => array( 'filter' => FILTER_VALIDATE_IS_REGEX, 'default' => '', 'pageset' => true ) ); validate_store_request_vars($filters, 'sess_clog'); /* ================= input validation ================= */ /* enable page refreshes */ kill_session_var('custom'); set_request_var('page_referrer', 'view_logfile'); load_current_session_value('page_referrer', 'page_referrer', 'view_logfile'); if ($clogAdmin && isset_request_var('purge_continue')) { clog_purge_logfile(); $logfile = read_config_option('path_cactilog'); } $page_nr = get_request_var('page'); $page = $config['url_path'] . 'clog' . (!$clogAdmin ? '_user' : '') . '.php?header=false'; $page .= '&filename=' . basename($logfile) . '&page=' . $page_nr; $refresh = array( 'seconds' => get_request_var('refresh'), 'page' => $page, 'logout' => 'false' ); set_page_refresh($refresh); general_header(); if ($clogAdmin && isset_request_var('purge')) { form_start('clog.php'); html_start_box(__('Purge'), '50%', '', '3', 'center', ''); print "

" . __('Click \'Continue\' to purge the Log File.


Note: If logging is set to both Cacti and Syslog, the log information will remain in Syslog.') . "

  \n"; html_end_box(); return; } html_start_box(__('Log Filters'), '100%', '', '3', 'center', ''); filter($clogAdmin); html_end_box(); /* read logfile into an array and display */ $total_rows = 0; $number_of_lines = get_request_var('tail_lines') < 0 ? read_config_option('max_display_rows') : get_request_var('tail_lines'); $logcontents = tail_file($logfile, $number_of_lines, get_request_var('message_type'), get_request_var('rfilter'), $page_nr, $total_rows); if (get_request_var('reverse') == 1) { $logcontents = array_reverse($logcontents); } if (!$clogAdmin) { $exclude_regex = read_config_option('clog_exclude', true); if ($exclude_regex != '') { $ad_filter = __(' - Admin Filter in Affect'); } else { $ad_filter = __(' - No Admin Filter in Affect'); } } else { $ad_filter = __(' - Admin View'); $exclude_regex = ''; } if (get_request_var('message_type') > 0) { $start_string = __('Log [Total Lines: %d %s - Additional Filter in Affect]', $total_rows, $ad_filter); } else { $start_string = __('Log [Total Lines: %d %s - No Other Filter in Affect]', $total_rows, $ad_filter); } $rfilter = get_request_var('rfilter'); $reverse = get_request_var('reverse'); $refreshTime = get_request_var('refresh'); $message_type = get_request_var('message_type'); $tail_lines = get_request_var('tail_lines'); $base_url = 'clog.php?rfilter='.$rfilter.'&reverse='.$reverse.'&refresh='.$refreshTime.'&message_type='.$message_type.'&tail_lines='.$tail_lines.'&filename='.basename($logfile); $nav = html_nav_bar($base_url, MAX_DISPLAY_PAGES, $page_nr, $number_of_lines, $total_rows, 13, __('Entries'), 'page', 'main'); echo $nav; html_start_box($start_string, '100%', '', '3', 'center', ''); $linecolor = false; $hosts = db_fetch_assoc_prepared('SELECT id, description FROM host'); $hostDescriptions = array(); foreach ($hosts as $host) { $hostDescriptions[$host['id']] = html_escape($host['description']); } foreach ($logcontents as $item) { $host_start = strpos($item, 'Device['); $ds_start = strpos($item, 'DS['); if (!$host_start && !$ds_start) { $new_item = html_escape($item); } else { $new_item = ''; if ($host_start) { $host_end = strpos($item, ']', $host_start); $host_id = substr($item, $host_start + 7, $host_end - ($host_start + 7)); $new_item .= substr($item, 0, $host_start) . " Device[" . (isset($hostDescriptions[$host_id]) ? $hostDescriptions[$host_id]:'') . ']'; $item = substr($item, $host_end + 1); } $ds_start = strpos($item, 'DS['); if ($ds_start) { $ds_end = strpos($item, ']', $ds_start); $ds_id = substr($item, $ds_start + 3, $ds_end - ($ds_start + 3)); $ds_ids = explode(', ', $ds_id); if (sizeof($ds_ids)) { $graph_add = $config['url_path'] . 'graph_view.php?page=1&style=selective&action=preview&graph_add='; $new_item .= " Graphs[ $title) { $graph_add .= ($i > 0 ? '%2C' : '') . $key; if ($titles != '') { $titles .= ", '" . html_escape($title) . "'"; } else { $titles .= "'" . html_escape($title) . "'"; } $i++; } } } $new_item .= html_escape($graph_add) . "' title='" . __esc('View Graphs') . "'>" . $titles . ']'; $new_item .= ' DS['; $i = 0; foreach($ds_ids as $ds_id) { $new_item .= ($i == 0 ? '':', ') . "" . $ds_id . ''; $i++; } $new_item .= ']'; } }else{ $new_item .= html_escape($item); } } /* respect the exclusion filter */ if ($exclude_regex != '' && !$clogAdmin) { if (validate_is_regex($exclude_regex)) { if (preg_match($exclude_regex, $new_item)) { continue; } } elseif (!$exclude_reported) { cacti_log('Cacti Log Exclude Regex "' . $exclude_regex . '" is Invalid. Update your Exclude Regex to be valid!'); $exclude_reported = true; } } /* get the background color */ if (strpos($new_item, 'ERROR') !== false || strpos($new_item, 'FATAL') !== false) { $class = 'clogError'; } elseif (strpos($new_item, 'WARN') !== false) { $class = 'clogWarning'; } elseif (strpos($new_item, ' SQL ') !== false) { $class = 'clogSQL'; } elseif (strpos($new_item, 'DEBUG') !== false) { $class = 'clogDebug'; } elseif (strpos($new_item, 'STATS') !== false) { $class = 'clogStats'; } else { if ($linecolor) { $class = 'odd'; } else { $class = 'even'; } $linecolor = !$linecolor; } ?>
'> '> '>
'>