0 GROUP BY i.type_id'); /* Get RRDtool version */ $rrdtool_version = 'Unknown'; if ((file_exists(read_config_option('path_rrdtool'))) && ((function_exists('is_executable')) && (is_executable(read_config_option('path_rrdtool'))))) { $out_array = array(); exec(cacti_escapeshellcmd(read_config_option('path_rrdtool')), $out_array); if (cacti_sizeof($out_array) > 0) { if (preg_match('/^RRDtool ([0-9.]+)/', $out_array[0], $m)) { preg_match('/^([0-9]+\.[0-9]+\.[0.9]+)/', $m[1], $m2); $rrdtool_release = $m[1]; $rrdtool_version = $rrdtool_release; } } } /* Get SNMP cli version */ if ((file_exists(read_config_option('path_snmpget'))) && ((function_exists('is_executable')) && (is_executable(read_config_option('path_snmpget'))))) { $snmp_version = shell_exec(cacti_escapeshellcmd(read_config_option('path_snmpget')) . ' -V 2>&1'); } else { $snmp_version = "" . __('NET-SNMP Not Installed or its paths are not set. Please install if you wish to monitor SNMP enabled devices.') . ""; } /* Check RRDtool issues */ $rrdtool_errors = array(); if (cacti_version_compare($rrdtool_version, get_rrdtool_version(), '<')) { $rrdtool_errors[] = "" . __('ERROR: Installed RRDtool version does not exceed configured version.
Please visit the %s and select the correct RRDtool Utility Version.', "" . __('Configuration Settings') . '') . "
"; } $graph_gif_count = db_fetch_cell('SELECT COUNT(*) FROM graph_templates_graph WHERE image_format_id = 2'); if ($graph_gif_count > 0) { $rrdtool_errors[] = "" . __('ERROR: RRDtool 1.2.x+ does not support the GIF images format, but %d" graph(s) and/or templates have GIF set as the image format.', $graph_gif_count) . ''; } /* Get spine version */ $spine_version = 'Unknown'; if ((file_exists(read_config_option('path_spine'))) && ((function_exists('is_executable')) && (is_executable(read_config_option('path_spine'))))) { $out_array = array(); exec(cacti_escapeshellcmd(read_config_option('path_spine')) . ' --version', $out_array); if (cacti_sizeof($out_array) > 0) { $spine_version = $out_array[0]; } } /* ================= input validation ================= */ get_filter_request_var('tab', FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^([a-z_A-Z]+)$/'))); /* ==================================================== */ /* present a tabbed interface */ $tabs = array( 'summary' => __('Summary'), 'database' => __('Database'), 'phpinfo' => __('PHP Info'), ); /* set the default tab */ load_current_session_value('tab', 'sess_ts_tabs', 'summary'); $current_tab = get_nfilter_request_var('tab'); $header_label = __('Technical Support [%s]', $tabs[get_request_var('tab')]); if (cacti_sizeof($tabs)) { $i = 0; /* draw the tabs */ print "
\n"; } /* Display tech information */ html_start_box($header_label, '100%', '', '3', 'center', ''); if (get_request_var('tab') == 'summary') { html_section_header(__('General Information'), 2); form_alternate_row(); print '' . __('Date') . "\n"; print '' . date('r') . "\n"; form_end_row(); api_plugin_hook_function('custom_version_info'); form_alternate_row(); print '' . __('Cacti Version') . "\n"; print '' . CACTI_VERSION . "\n"; form_end_row(); form_alternate_row(); print '' . __('Cacti OS') . "\n"; print '' . $config['cacti_server_os'] . "\n"; form_end_row(); form_alternate_row(); print '' . __('RSA Fingerprint') . "\n"; print '' . read_config_option('rsa_fingerprint') . "\n"; form_end_row(); form_alternate_row(); print '' . __('NET-SNMP Version') . "\n"; print '' . $snmp_version . "\n"; form_end_row(); form_alternate_row(); print '' . __('RRDtool Version') . ' ' . __('Configured') . "\n"; print '' . get_rrdtool_version() . "+\n"; form_end_row(); form_alternate_row(); print '' . __('RRDtool Version') . ' ' . __('Found') . "\n"; print '' . $rrdtool_release . "\n"; form_end_row(); if (!empty($rrdtool_errors)) { form_alternate_row(); print " \n"; $br = ''; print ""; foreach ($rrdtool_errors as $rrdtool_error) { print $br . $rrdtool_error; $br = '
'; } print "\n"; form_end_row(); } form_alternate_row(); print '' . __('Devices') . "\n"; print '' . number_format_i18n($host_count, -1) . "\n"; form_end_row(); form_alternate_row(); print '' . __('Graphs') . "\n"; print '' . number_format_i18n($graph_count, -1) . "\n"; form_end_row(); form_alternate_row(); print '' . __('Data Sources') . "\n"; print ''; $data_total = 0; if (cacti_sizeof($data_count)) { foreach ($data_count as $item) { print $input_types[$item['type_id']] . ': ' . number_format_i18n($item['total'], -1) . '
'; $data_total += $item['total']; } print __('Total: %s', number_format_i18n($data_total, -1)); } else { print "0"; } print "\n"; form_end_row(); html_section_header(__('Poller Information'), 2); form_alternate_row(); print "Interval\n"; print '' . read_config_option('poller_interval') . "\n"; if (file_exists(read_config_option('path_spine')) && $poller_options[read_config_option('poller_type')] == 'spine') { $type = $spine_version; if (!strpos($spine_version, CACTI_VERSION)) { $type .= ' (' . __('Different version of Cacti and Spine!') . ')'; } } else { $type = $poller_options[read_config_option('poller_type')]; } form_end_row(); form_alternate_row(); print '' . __('Type') . "\n"; print '' . $type . "\n"; form_end_row(); form_alternate_row(); print '' . __('Items') . "\n"; print ''; $total = 0; if (cacti_sizeof($poller_item)) { foreach ($poller_item as $item) { print __('Action[%s]', $item['action']) . ': ' . number_format_i18n($item['total'], -1) . '
'; $total += $item['total']; } print __('Total: %s', number_format_i18n($total, -1)); } else { print "" . __('No items to poll') . ""; } print "\n"; form_end_row(); form_alternate_row(); print '' . __('Concurrent Processes') . "\n"; print '' . read_config_option('concurrent_processes') . "\n"; form_end_row(); form_alternate_row(); print '' . __('Max Threads') . "\n"; print '' . read_config_option('max_threads') . "\n"; form_end_row(); form_alternate_row(); print '' . __('PHP Servers') . "\n"; print '' . read_config_option('php_servers') . "\n"; form_end_row(); form_alternate_row(); print '' . __('Script Timeout') . "\n"; print '' . read_config_option('script_timeout') . "\n"; form_end_row(); form_alternate_row(); print '' . __('Max OID') . "\n"; print '' . read_config_option('max_get_size') . "\n"; form_end_row(); form_alternate_row(); print '' . __('Last Run Statistics') . "\n"; print '' . read_config_option('stats_poller') . "\n"; form_end_row(); /* Get System Memory */ $memInfo = utilities_get_system_memory(); if (cacti_sizeof($memInfo)) { html_section_header(__('System Memory'), 2); foreach($memInfo as $name => $value) { if ($config['cacti_server_os'] == 'win32') { form_alternate_row(); print "$name\n"; print '' . number_format_i18n($value/1000, 2) . " MB\n"; form_end_row(); } else { switch($name) { case 'SwapTotal': case 'SwapFree': case 'Cached': case 'MemTotal': case 'MemFree': case 'MemAvailable': case 'Buffers': case 'Active': case 'Inactive': form_alternate_row(); print "$name\n"; print '' . number_format_i18n($value, 2) . "\n"; form_end_row(); } } } form_end_row(); } html_section_header(__('PHP Information'), 2); form_alternate_row(); print "" . __('PHP Version') . "\n"; if (version_compare(PHP_VERSION, '5.5.0') >= 0) { print '' . PHP_VERSION . "\n"; } else { print '' . PHP_VERSION . "
" . __('PHP Version 5.5.0+ is recommended due to strong password hashing support.') . "\n"; } form_end_row(); form_alternate_row(); print "" . __('PHP OS') . "\n"; print '' . PHP_OS . "\n"; form_end_row(); form_alternate_row(); print "" . __('PHP uname') . "\n"; print ''; if (function_exists('php_uname')) { print php_uname(); } else { print __('N/A'); } print "\n"; form_end_row(); form_alternate_row(); print "" . __('PHP SNMP') . "\n"; print ''; if (function_exists('snmpget')) { print __('Installed'); } else { print __('Not Installed'); } print "\n"; form_end_row(); form_alternate_row(); print "max_execution_time\n"; print '' . ini_get('max_execution_time') . "\n"; form_end_row(); form_alternate_row(); print "memory_limit\n"; print '' . ini_get('memory_limit'); /* Calculate memory suggestion based off of data source count */ $memory_suggestion = $data_total * 32768; /* Set minimum - 16M */ if ($memory_suggestion < 16777216) { $memory_suggestion = 16777216; } /* Set maximum - 512M */ if ($memory_suggestion > 536870912) { $memory_suggestion = 536870912; } /* Suggest values in 8M increments */ $memory_suggestion = round($memory_suggestion / 8388608) * 8388608; if (memory_bytes(ini_get('memory_limit')) < $memory_suggestion) { print "
"; if ((ini_get('memory_limit') == -1)) { print __("You've set memory limit to 'unlimited'.") . "
"; } print __('It is highly suggested that you alter you php.ini memory_limit to %s or higher.', memory_readable($memory_suggestion)) . '
' . __('This suggested memory value is calculated based on the number of data source present and is only to be used as a suggestion, actual values may vary system to system based on requirements.'); print '

'; } print "\n"; form_end_row(); utilities_get_mysql_recommendations(); } elseif (get_request_var('tab') == 'database') { html_section_header(__('MySQL Table Information - Sizes in KBytes'), 2); form_alternate_row(); print " "; if (cacti_sizeof($tables) > 0) { print "\n"; print "\n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print "\n"; foreach ($tables as $table) { form_alternate_row(); print '\n"; print '\n"; print '\n"; print '\n"; print '\n"; print '\n"; print '\n"; print '\n"; form_end_row(); } print "
" . __('Name') . "" . __('Engine') . "" . __('Rows') . "" . __('Avg Row Length') . "" . __('Data Length') . "" . __('Index Length') . "" . __('Collation') . "" . __('Comment') . "
' . $table['TABLE_NAME'] . "' . $table['ENGINE'] . "' . number_format_i18n($table['TABLE_ROWS'], -1) . "' . number_format_i18n($table['AVG_ROW_LENGTH'], -1) . "' . number_format_i18n($table['DATA_LENGTH'], -1) . "' . number_format_i18n($table['INDEX_LENGTH'], -1) . "' . $table['TABLE_COLLATION'] . "' . $table['TABLE_COMMENT'] . "
\n"; } else { print __('Unable to retrieve table status'); } print "\n"; form_end_row(); } else { html_section_header(__('PHP Module Information'), 2); form_alternate_row(); $php_info = str_replace( array('width="600"', 'th colspan="2"', ','), array('', 'th class="subHeaderColumn"', ', '), $php_info ); print "" . $php_info . "\n"; form_end_row(); } html_end_box(); ?> array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'filter' => array( 'filter' => FILTER_DEFAULT, 'pageset' => true, 'default' => '' ), 'sort_column' => array( 'filter' => FILTER_CALLBACK, 'default' => 'time', 'options' => array('options' => 'sanitize_search_string') ), 'sort_direction' => array( 'filter' => FILTER_CALLBACK, 'default' => 'DESC', 'options' => array('options' => 'sanitize_search_string') ), 'username' => array( 'filter' => FILTER_CALLBACK, 'default' => '-1', 'options' => array('options' => 'sanitize_search_string') ), 'result' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ) ); validate_store_request_vars($filters, 'sess_userlog'); /* ================= input validation ================= */ if (get_request_var('rows') == '-1') { $rows = read_config_option('num_rows_table'); } else { $rows = get_request_var('rows'); } ?>
' title=''> ' title=''> ' title=''>
'>
array(__('User'), 'ASC'), 'full_name' => array(__('Full Name'), 'ASC'), 'realm' => array(__('Authentication Realm'), 'ASC'), 'time' => array(__('Date'), 'DESC'), 'result' => array(__('Result'), 'DESC'), 'ip' => array(__('IP Address'), 'DESC') ); html_header_sort($display_text, get_request_var('sort_column'), get_request_var('sort_direction'), 1, 'utilities.php?action=view_user_log'); $i = 0; if (cacti_sizeof($user_log)) { foreach ($user_log as $item) { form_alternate_row('line' . $i, true); ?> 1) { db_execute_prepared('DELETE FROM user_log WHERE username = ? AND result IN(1) ORDER BY time LIMIT ' . ($total_login_rows - 1), array($user['username'])); } if ($total_token_rows > 1) { db_execute_prepared('DELETE FROM user_log WHERE username = ? AND result IN(2) ORDER BY time LIMIT ' . ($total_token_rows - 1), array($user['username'])); } db_execute_prepared('DELETE FROM user_log WHERE username = ? AND result = 0', array($user['username'])); } /* delete inactive users */ db_execute('DELETE FROM user_log WHERE user_id NOT IN (SELECT id FROM user_auth) OR username NOT IN (SELECT username FROM user_auth)'); } } function utilities_view_logfile() { global $log_tail_lines, $page_refresh_interval, $config; $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; } else { $logfile = read_config_option('path_cactilog'); } } 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: utilities.php?action=view_logfile&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, 'pageset' => true, 'default' => '-1' ), 'rfilter' => array( 'filter' => FILTER_VALIDATE_IS_REGEX, 'pageset' => true, 'default' => '' ), 'message_type' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'reverse' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'refresh' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_config_option('log_refresh_interval') ) ); validate_store_request_vars($filters, 'sess_log'); /* ================= input validation ================= */ $page_nr = get_request_var('page'); $page = 'utilities.php?action=view_logfile&header=false'; $page .= '&filename=' . basename($logfile) . '&page=' . $page_nr; $refresh = array( 'seconds' => get_request_var('refresh'), 'page' => $page, 'logout' => 'false' ); set_page_refresh($refresh); top_header(); ?>
' title=''> ' title=''> ' title=''>
'>
0) { $start_string = __('Log [Total Lines: %d - Non-Matching Items Hidden]', $total_rows); } else { $start_string = __('Log [Total Lines: %d - All Items Shown]', $total_rows); } $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 = 'utilities.php?action=view_logfile&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; 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 = ''; while ($host_start) { $host_end = strpos($item, ']', $host_start); $host_id = substr($item, $host_start + 7, $host_end - ($host_start + 7)); $new_item .= html_escape(substr($item, 0, $host_start + 7)) . "" . html_escape(substr($item, $host_start + 7, $host_end - ($host_start + 7))) . ''; $item = substr($item, $host_end); $host_start = strpos($item, 'Device['); } $ds_start = strpos($item, 'DS['); while ($ds_start) { $ds_end = strpos($item, ']', $ds_start); $ds_id = substr($item, $ds_start + 3, $ds_end - ($ds_start + 3)); $new_item .= html_escape(substr($item, 0, $ds_start + 3)) . "" . html_escape(substr($item, $ds_start + 3, $ds_end - ($ds_start + 3))) . ''; $item = substr($item, $ds_end); $ds_start = strpos($item, 'DS['); } $new_item .= html_escape($item); } /* 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; } print "" . $new_item . "\n"; } html_end_box(); if ($total_rows) { echo $nav; } bottom_footer(); } function utilities_clear_logfile() { load_current_session_value('refresh', 'sess_logfile_refresh', read_config_option('log_refresh_interval')); $refresh['seconds'] = get_request_var('refresh'); $refresh['page'] = 'utilities.php?action=view_logfile&header=false'; $refresh['logout'] = 'false'; set_page_refresh($refresh); top_header(); $logfile = read_config_option('path_cactilog'); if ($logfile == '') { $logfile = './log/cacti.log'; } html_start_box(__('Clear Cacti Log'), '100%', '', '3', 'center', ''); if (file_exists($logfile)) { if (is_writable($logfile)) { /* fill in the current date for printing in the log */ if (defined('CACTI_DATE_TIME_FORMAT')) { $date = date(CACTI_DATE_TIME_FORMAT); } else { $date = date('Y-m-d H:i:s'); } $log_fh = fopen($logfile, 'w'); fwrite($log_fh, __('%s - WEBUI NOTE: Cacti Log Cleared from Web Management Interface.', $date) . PHP_EOL); fclose($log_fh); print '' . __('Cacti Log Cleared') . ''; } else { print "" . __('Error: Unable to clear log, no write permissions.') . ""; } } else { print "" . __('Error: Unable to clear log, file does not exist.'). ""; } html_end_box(); } function utilities_view_snmp_cache() { global $poller_actions, $item_rows; /* ================= input validation and session storage ================= */ $filters = array( 'rows' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'filter' => array( 'filter' => FILTER_DEFAULT, 'pageset' => true, 'default' => '' ), 'with_index' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '0' ), 'host_id' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'snmp_query_id' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'poller_action' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ) ); validate_store_request_vars($filters, 'sess_usnmp'); /* ================= input validation ================= */ if (get_request_var('rows') == '-1') { $rows = read_config_option('num_rows_table'); } else { $rows = get_request_var('rows'); } $refresh['seconds'] = '300'; $refresh['page'] = 'utilities.php?action=view_snmp_cache&header=false'; $refresh['logout'] = 'false'; set_page_refresh($refresh); ?>
' title=''> ' title=''>
'> ' >
array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'filter' => array( 'filter' => FILTER_DEFAULT, 'pageset' => true, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'sort_column' => array( 'filter' => FILTER_CALLBACK, 'default' => 'dtd.name_cache', 'options' => array('options' => 'sanitize_search_string') ), 'sort_direction' => array( 'filter' => FILTER_CALLBACK, 'default' => 'ASC', 'options' => array('options' => 'sanitize_search_string') ), 'host_id' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'template_id' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'poller_action' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ) ); validate_store_request_vars($filters, 'sess_poller'); /* ================= input validation ================= */ if (get_request_var('rows') == '-1') { $rows = read_config_option('num_rows_table'); } else { $rows = get_request_var('rows'); } $refresh['seconds'] = '300'; $refresh['page'] = 'utilities.php?action=view_poller_cache'; $refresh['logout'] = 'false'; set_page_refresh($refresh); ?>
' title=''> ' title=''>
'>
array(__('Data Source Name'), 'ASC'), 'h.description' => array(__('Device Description'), 'ASC'), 'nosort' => array(__('Details'), 'ASC')); html_header_sort($display_text, get_request_var('sort_column'), get_request_var('sort_direction'), 1, 'utilities.php?action=view_poller_cache'); $i = 0; if (cacti_sizeof($poller_cache)) { foreach ($poller_cache as $item) { if ($i % 2 == 0) { $class = 'odd'; } else { $class = 'even'; } print "\n"; ?> \n"; ?> array( 'link' => 'utilities.php?action=view_tech', 'description' => __('Cacti technical support page. Used by developers and technical support persons to assist with issues in Cacti. Includes checks for common configuration issues.') ), __('Log Administration') => array( 'link' => 'utilities.php?action=view_logfile', 'description' => __('The Cacti Log stores statistic, error and other message depending on system settings. This information can be used to identify problems with the poller and application.') ), __('View User Log') => array( 'link' => 'utilities.php?action=view_user_log', 'description' => __('Allows Administrators to browse the user log. Administrators can filter and export the log as well.') ) ); $utilities[__('Poller Cache Administration')] = array( __('View Poller Cache') => array( 'link' => 'utilities.php?action=view_poller_cache', 'description' => __('This is the data that is being passed to the poller each time it runs. This data is then in turn executed/interpreted and the results are fed into the RRDfiles for graphing or the database for display.') ), __('View Data Query Cache') => array( 'link' => 'utilities.php?action=view_snmp_cache', 'description' => __('The Data Query Cache stores information gathered from Data Query input types. The values from these fields can be used in the text area of Graphs for Legends, Vertical Labels, and GPRINTS as well as in CDEF\'s.') ), __('Rebuild Poller Cache') => array( 'link' => 'utilities.php?action=clear_poller_cache', 'description' => __('The Poller Cache will be re-generated if you select this option. Use this option only in the event of a database crash if you are experiencing issues after the crash and have already run the database repair tools. Alternatively, if you are having problems with a specific Device, simply re-save that Device to rebuild its Poller Cache. There is also a command line interface equivalent to this command that is recommended for large systems. NOTE: On large systems, this command may take several minutes to hours to complete and therefore should not be run from the Cacti UI. You can simply run \'php -q cli/rebuild_poller_cache.php --help\' at the command line for more information.') ), __('Rebuild Resource Cache') => array( 'link' => 'utilities.php?action=rebuild_resource_cache', 'description' => __('When operating multiple Data Collectors in Cacti, Cacti will attempt to maintain state for key files on all Data Collectors. This includes all core, non-install related website and plugin files. When you force a Resource Cache rebuild, Cacti will clear the local Resource Cache, and then rebuild it at the next scheduled poller start. This will trigger all Remote Data Collectors to recheck their website and plugin files for consistency.') ), ); $utilities[__('Boost Utilities')] = array( __('View Boost Status') => array( 'link' => 'utilities.php?action=view_boost_status', 'description' => __('This menu pick allows you to view various boost settings and statistics associated with the current running Boost configuration.') ), ); $utilities[__('RRD Utilities')] = array( __('RRDfile Cleaner') => array( 'link' => 'rrdcleaner.php', 'description' => __('When you delete Data Sources from Cacti, the corresponding RRDfiles are not removed automatically. Use this utility to facilitate the removal of these old files.') ), ); if (snmpagent_enabled()) { $utilities[__('SNMPAgent Utilities')] = array( __('View SNMPAgent Cache') => array( 'link' => 'utilities.php?action=view_snmpagent_cache', 'description' => __('This shows all objects being handled by the SNMPAgent.') ), __('Rebuild SNMPAgent Cache') => array( 'link' => 'utilities.php?action=rebuild_snmpagent_cache', 'description' => __('The SNMP cache will be cleared and re-generated if you select this option. Note that it takes another poller run to restore the SNMP cache completely.') ), __('View SNMPAgent Notification Log') => array( 'link' => 'utilities.php?action=view_snmpagent_events', 'description' => __('This menu pick allows you to view the latest events SNMPAgent has handled in relation to the registered notification receivers.') ), __('SNMP Notification Receivers') => array( 'link' => 'managers.php', 'description' => __('Allows Administrators to maintain SNMP notification receivers.') ), ); } api_plugin_hook('utilities_array'); html_start_box(__('Cacti System Utilities'), '100%', '', '3', 'center', ''); foreach($utilities as $header => $content) { html_section_header($header, 2); foreach($content as $title => $details) { form_alternate_row(); print ""; print "" . $title . ""; print "\n"; print ""; print $details['description']; print "\n"; form_end_row(); } } api_plugin_hook('utilities_list'); html_end_box(); } function boost_display_run_status() { global $config, $refresh_interval, $boost_utilities_interval, $boost_refresh_interval, $boost_max_runtime; /* ================= input validation ================= */ get_filter_request_var('refresh'); /* ==================================================== */ load_current_session_value('refresh', 'sess_boost_utilities_refresh', '30'); $last_run_time = read_config_option('boost_last_run_time', true); $next_run_time = read_config_option('boost_next_run_time', true); $rrd_updates = read_config_option('boost_rrd_update_enable', true); $boost_cache = read_config_option('boost_png_cache_enable', true); $max_records = read_config_option('boost_rrd_update_max_records', true); $max_runtime = read_config_option('boost_rrd_update_max_runtime', true); $update_interval = read_config_option('boost_rrd_update_interval', true); $peak_memory = read_config_option('boost_peak_memory', true); $detail_stats = read_config_option('stats_detail_boost', true); $refresh['seconds'] = get_request_var('refresh'); $refresh['page'] = 'utilities.php?action=view_boost_status&header=false'; $refresh['logout'] = 'false'; set_page_refresh($refresh); html_start_box(__('Boost Status'), '100%', '', '3', 'center', ''); ?>
' onClick='applyFilter()'>
' . __('WARNING:') . '' . __('Cannot open directory'); $cache_files = '' . __('WARNING:') . ' ' . __('Unknown'); } } else { $directory_size = '' . __('WARNING:') . ' ' . __('Directory Does NOT Exist!!'); $cache_files = '' . __('WARNING:') . ' ' . __('N/A'); } $i = 0; /* boost status display */ html_section_header(__('Current Boost Status'), 2); form_alternate_row(); print '' . __('Boost On-demand Updating:') . '' . ($rrd_updates == '' ? 'Disabled' : $boost_status_text) . ''; form_alternate_row(); print '' . __('Total Data Sources:') . '' . number_format_i18n($total_data_sources, -1) . ''; if ($total_records) { form_alternate_row(); print '' . __('Pending Boost Records:') . '' . number_format_i18n($pending_records, -1) . ''; form_alternate_row(); print '' . __('Archived Boost Records:') . '' . number_format_i18n($arch_records, -1) . ''; form_alternate_row(); print '' . __('Total Boost Records:') . '' . number_format_i18n($total_records, -1) . ''; } /* boost status display */ html_section_header(__('Boost Storage Statistics'), 2); /* describe the table format */ form_alternate_row(); print '' . __('Database Engine:') . '' . $engine . ''; /* tell the user how big the table is */ form_alternate_row(); print '' . __('Current Boost Table(s) Size:') . '' . boost_file_size_display($data_length, 2) . ''; /* tell the user about the average size/record */ form_alternate_row(); print '' . __('Avg Bytes/Record:') . '' . boost_file_size_display($avg_row_length, 0) . ''; /* tell the user about the average size/record */ $output_length = read_config_option('boost_max_output_length'); if ($output_length != '') { $parts = explode(':', $output_length); if ((time()-1200) > $parts[0]) { $ref = true; } else { $ref = false; } } else { $ref = true; } if ($ref) { if (strcmp($engine, 'MEMORY') == 0) { $max_length = db_fetch_cell('SELECT MAX(LENGTH(output)) FROM poller_output_boost'); } else { $max_length = '0'; } db_execute("REPLACE INTO settings (name, value) VALUES ('boost_max_output_length', '" . time() . ':' . $max_length . "')"); } else { $max_length = $parts[1]; } if ($max_length != 0) { form_alternate_row(); print '' . __('Max Record Length:') . '' . __('%d Bytes', number_format_i18n($max_length)) . ''; } /* tell the user about the "Maximum Size" this table can be */ form_alternate_row(); if (strcmp($engine, 'MEMORY')) { $max_table_allowed = __('Unlimited'); $max_table_records = __('Unlimited'); } else { $max_table_allowed = boost_file_size_display($max_data_length, 2); $max_table_records = number_format_i18n(($avg_row_length ? $max_data_length/$avg_row_length : 0), 3, 1000); } print '' . __('Max Allowed Boost Table Size:') . '' . $max_table_allowed . ''; /* tell the user about the estimated records that "could" be held in memory */ form_alternate_row(); print '' . __('Estimated Maximum Records:') . '' . $max_table_records . ' Records'; /* boost last runtime display */ html_section_header(__('Runtime Statistics'), 2); form_alternate_row(); print '' . __('Last Start Time:') . '' . $last_run_time . ''; form_alternate_row(); print '' . __('Last Run Duration:') . ''; if (is_numeric($boost_last_run_duration)) { print (($boost_last_run_duration > 60) ? __('%d minutes', (int)($boost_last_run_duration/60)) : '' ) . __('%d seconds', $boost_last_run_duration%60); if ($rrd_updates != ''){ print ' (' . __('%0.2f percent of update frequency)', round(100*$boost_last_run_duration/$update_interval/60));} } else { print __('N/A'); } print ''; form_alternate_row(); print '' . __('RRD Updates:') . '' . ($boost_rrds_updated != '' ? number_format_i18n($boost_rrds_updated, -1):'-') . ''; form_alternate_row(); print '' . __('Peak Poller Memory:') . '' . ((read_config_option('boost_peak_memory') != '' && is_numeric(read_config_option('boost_peak_memory'))) ? (round(read_config_option('boost_peak_memory')/1024/1024,2)) . ' ' . __('MBytes') : __('N/A')) . ''; form_alternate_row(); print '' . __('Detailed Runtime Timers:') . '' . (($detail_stats != '') ? $detail_stats:__('N/A')) . ''; form_alternate_row(); print '' . __('Max Poller Memory Allowed:') . '' . ((read_config_option('boost_poller_mem_limit') != '') ? (read_config_option('boost_poller_mem_limit')) . ' ' . __('MBytes') : __('N/A')) . ''; /* boost runtime display */ html_section_header(__('Run Time Configuration'), 2); form_alternate_row(); print '' . __('Update Frequency:') . '' . ($rrd_updates == '' ? __('N/A') : $boost_refresh_interval[$update_interval]) . ''; form_alternate_row(); print '' . __('Next Start Time:') . '' . $next_run_time . ''; form_alternate_row(); print '' . __('Maximum Records:') . '' . number_format_i18n($max_records, -1) . ' ' . __('Records') . ''; form_alternate_row(); print '' . __('Maximum Allowed Runtime:') . '' . $boost_max_runtime[$max_runtime] . ''; /* boost caching */ html_section_header(__('Image Caching'), 2); form_alternate_row(); print '' . __('Image Caching Status:') . '' . ($boost_cache == '' ? __('Disabled') : __('Enabled')) . ''; form_alternate_row(); print '' . __('Cache Directory:') . '' . $cache_directory . ''; form_alternate_row(); print '' . __('Cached Files:') . '' . $cache_files . ''; form_alternate_row(); print '' . __('Cached Files Size:') . '' . $directory_size . ''; html_end_box(true); } /** * * * snmpagent_utilities_run_cache() * * @param mixed * @return */ function snmpagent_utilities_run_cache() { global $item_rows; get_filter_request_var('mib', FILTER_CALLBACK, array('options' => 'sanitize_search_string')); $mibs = db_fetch_assoc('SELECT DISTINCT mib FROM snmpagent_cache'); $registered_mibs = array(); if($mibs && $mibs >0) { foreach($mibs as $mib) { $registered_mibs[] = $mib['mib']; } } /* ================= input validation ================= */ if(!in_array(get_request_var('mib'), $registered_mibs) && get_request_var('mib') != '-1' && get_request_var('mib') != '') { die_html_input_error(); } /* ==================================================== */ /* ================= input validation and session storage ================= */ $filters = array( 'rows' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'filter' => array( 'filter' => FILTER_DEFAULT, 'pageset' => true, 'default' => '' ), 'mib' => array( 'filter' => FILTER_CALLBACK, 'default' => '-1', 'options' => array('options' => 'sanitize_search_string') ) ); validate_store_request_vars($filters, 'sess_snmpac'); /* ================= input validation ================= */ if (get_request_var('rows') == -1) { $rows = read_config_option('num_rows_table'); } else { $rows = get_request_var('rows'); } ?>
'> ' title=''> ' title=''>
' . $name . ''; }else { print "$name"; } form_selectable_cell($mib, $item['oid']); form_selectable_cell($item['kind'], $item['oid']); form_selectable_cell($max_access, $item['oid']); form_selectable_ecell((in_array($item['kind'], array(__('Scalar'), __('Column Data'))) ? $item['value'] : __('N/A')), $item['oid']); form_end_row(); } } html_end_box(); if (cacti_sizeof($snmp_cache)) { print $nav; } ?> 'LOW', SNMPAGENT_EVENT_SEVERITY_MEDIUM => 'MEDIUM', SNMPAGENT_EVENT_SEVERITY_HIGH => 'HIGH', SNMPAGENT_EVENT_SEVERITY_CRITICAL => 'CRITICAL' ); $severity_colors = array( SNMPAGENT_EVENT_SEVERITY_LOW => '#00FF00', SNMPAGENT_EVENT_SEVERITY_MEDIUM => '#FFFF00', SNMPAGENT_EVENT_SEVERITY_HIGH => '#FF0000', SNMPAGENT_EVENT_SEVERITY_CRITICAL => '#FF00FF' ); $receivers = db_fetch_assoc('SELECT DISTINCT manager_id, hostname FROM snmpagent_notifications_log INNER JOIN snmpagent_managers ON snmpagent_managers.id = snmpagent_notifications_log.manager_id'); /* ================= input validation ================= */ get_filter_request_var('receiver'); if(!in_array(get_request_var('severity'), array_keys($severity_levels)) && get_request_var('severity') != '-1' && get_request_var('severity') != '') { die_html_input_error(); } /* ==================================================== */ if (isset_request_var('purge')) { db_execute('TRUNCATE table snmpagent_notifications_log'); /* reset filters */ set_request_var('clear', true); } /* ================= input validation and session storage ================= */ $filters = array( 'rows' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'filter' => array( 'filter' => FILTER_DEFAULT, 'pageset' => true, 'default' => '' ), 'severity' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'receiver' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ) ); validate_store_request_vars($filters, 'sess_snmpl'); /* ================= input validation ================= */ if (get_request_var('rows') == -1) { $rows = read_config_option('num_rows_table'); } else { $rows = get_request_var('rows'); } ?>
'> ' title=''> ' title=''> ' title=''>
"; print "" . date('Y-m-d H:i:s', $item['time']) . ''; print '' . html_escape($item['hostname']) . ''; if($item['description']) { print '' . html_escape($item['notification']) . ''; }else { print '' . html_escape($item['notification']) . ''; } print "$varbinds"; form_end_row(); } } else { print '' . __('No SNMP Notification Log Entries') . ''; } html_end_box(); if (cacti_sizeof($logs)) { print $nav; } ?>