__('Rerun Check'), 2 => __('Delete') ); set_default_action(); switch (get_request_var('action')) { case 'save': form_save(); break; case 'actions': form_actions(); break; case 'edit': top_header(); debug_add(); bottom_footer(); break; case 'view': top_header(); debug_view(); bottom_footer(); break; default: top_header(); debug_wizard(); bottom_footer(); break; } function form_actions() { global $actions, $assoc_actions; /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('drp_action', FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^([a-zA-Z0-9_]+)$/'))); /* ================= input validation ================= */ $selected_items = array(); if (isset_request_var('save_list')) { /* loop through each of the lists selected on the previous page and get more info about them */ while (list($var,$val) = each($_POST)) { if (preg_match('/^chk_([0-9]+)$/', $var, $matches)) { /* ================= input validation ================= */ input_validate_input_number($matches[1]); /* ==================================================== */ $selected_items[] = $matches[1]; } } /* if we are to save this form, instead of display it */ if (isset_request_var('save_list')) { if (get_request_var('drp_action') == '2') { /* delete */ debug_delete($selected_items); }elseif (get_request_var('drp_action') == '1') { /* Rerun */ debug_rerun($selected_items); } header('Location: data_debug.php?header=false'); exit; } } } function form_save() { if (isset_request_var('save_component')) { /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('local_data_id'); /* ==================================================== */ $save = array(); $save['id'] = get_nfilter_request_var('id'); $save['datasource'] = get_nfilter_request_var('local_data_id'); $info = array( 'rrd_folder_writable' => '', 'rrd_exists' => '', 'rrd_writable' => '', 'active' => '', 'owner' => '', 'runas_poller' => '', 'runas_website' => get_running_user(), 'last_result' => '', 'valid_data' => '', 'rra_timestamp' => '', 'rra_timestamp2' => '', 'rrd_match' => ''); $save['info'] = serialize($info); $save['started'] = time(); $save['user'] = intval($_SESSION['sess_user_id']); if (!is_error_message()) { $id = sql_save($save, 'data_debug'); if ($id) { raise_message(1); } else { raise_message(2); } } header('Location: data_debug.php?header=false'); exit; } } function debug_rerun ($selected_items) { $info = array( 'rrd_folder_writable' => '', 'rrd_exists' => '', 'rrd_writable' => '', 'active' => '', 'owner' => '', 'runas_poller' => '', 'runas_website' => get_running_user(), 'last_result' => '', 'valid_data' => '', 'rra_timestamp' => '', 'rra_timestamp2' => '', 'rrd_match' => ''); $info = serialize($info); if (!empty($selected_items)) { foreach($selected_items as $id) { $stime = time(); db_execute_prepared('UPDATE data_debug SET started = ?, done = 0, info = ?, issue = "" WHERE id = ? LIMIT 1', array($stime, $info, $id)); } } header('Location: data_debug.php?header=false'); exit; } function debug_delete ($selected_items) { if (!empty($selected_items)) { foreach($selected_items as $id) { $stime = time(); db_execute_prepared('DELETE FROM data_debug WHERE id = ? LIMIT 1', array($id)); } } header('Location: data_debug.php?header=false'); exit; } function debug_add() { global $config; $id = 0; $header_label = __('New Check'); form_start('data_debug.php', 'debug'); html_start_box(htmlspecialchars($header_label), '100%', '', '3', 'center', ''); $form_array = array( 'general_header' => array( 'friendly_name' => __('Debugging Data Source'), 'method' => 'spacer', ), 'local_data_id' => array( 'friendly_name' => __('Data Source'), 'method' => 'drop_sql', 'description' => __('Provide the Maintenance Schedule a meaningful name'), 'sql' => 'SELECT DISTINCT local_data_id as id, name_cache as name FROM data_template_data WHERE local_data_id > 0 ORDER BY name_cache', 'value' => '' ), 'save_component' => array( 'method' => 'hidden', 'value' => '1' ), 'save' => array( 'method' => 'hidden', 'value' => 'edit' ), 'id' => array( 'method' => 'hidden', 'value' => $id ) ); draw_edit_form( array( 'config' => array( 'no_form_tag' => true ), 'fields' => $form_array ) ); html_end_box(); form_save_button('data_debug.php', 'return'); } function debug_wizard() { global $actions, $refresh; $refresh = 60; $checks = db_fetch_assoc('SELECT * FROM data_debug ORDER BY id'); form_start('data_debug.php', 'chk'); html_start_box(__('Data Source Debugger'), '100%', '', '2', 'center', 'data_debug.php?action=edit'); html_header_checkbox(array(__('ID'), __('User'), __('Started'), __('Data Source'), __('Status'), __('Writable'), __('Exists'), __('Active'), __('RRD Match'), __('Valid Data'), __('RRD Updated'), __('Issue'))); if (cacti_sizeof($checks)) { foreach ($checks as $check) { $info = unserialize($check['info']); $issues = explode("\n", $check['issue']); $issue_line = ''; if (cacti_sizeof($issues)) { $issue_line = $issues[0]; } $issue_title = implode($issues, '
'); $user = db_fetch_cell_prepared('SELECT username FROM user_auth WHERE id = ?', array($check['user']), 'username'); form_alternate_row('line' . $check['id']); $name = get_data_source_title($check['datasource']); $title = $name; if (strlen($name) > 50) { $name = substr($name, 0, 50); } form_selectable_cell('' . $name . '', $check['id']); form_selectable_cell($user, $check['id']); form_selectable_cell(date('F j, Y, G:i', $check['started']), $check['id']); form_selectable_cell($check['datasource'], $check['id']); form_selectable_cell(debug_icon(($check['done'] ? (strlen($issue_line) ? 'off' : 'on' ) : '')), $check['id'], '', 'text-align: center;'); form_selectable_cell(debug_icon($info['rrd_writable']), $check['id'], '', 'text-align: center;'); form_selectable_cell(debug_icon($info['rrd_exists']), $check['id'], '', 'text-align: center;'); form_selectable_cell(debug_icon($info['active']), $check['id'], '', 'text-align: center;'); form_selectable_cell(debug_icon($info['rrd_match']), $check['id'], '', 'text-align: center;'); form_selectable_cell(debug_icon($info['valid_data']), $check['id'], '', 'text-align: center;'); form_selectable_cell(debug_icon(($info['rra_timestamp2'] != '' ? 1 : '')), $check['id'], '', 'text-align: center;'); form_selectable_cell('' . html_escape(strlen(trim($issue_line)) ? $issue_line : '') . '', $check['id']); form_checkbox_cell($check['id'], $check['id']); form_end_row(); } }else{ print "" . __('No Checks') . "\n"; } html_end_box(false); form_hidden_box('save_list', '1', ''); /* draw the dropdown containing a list of available actions for this form */ draw_actions_dropdown($actions); form_end(); } function debug_view() { global $config, $refresh; $refresh = 60; get_filter_request_var('id'); $id = get_nfilter_request_var('id'); $check = db_fetch_row_prepared('SELECT * FROM data_debug WHERE id = ?', array($id)); if (isset($check) && is_array($check)) { $check['info'] = unserialize($check['info']); } $dtd = db_fetch_row_prepared('SELECT * from data_template_data WHERE local_data_id = ?', array($check['datasource'])); $real_pth = str_replace('', $config['rra_path'], $dtd['data_source_path']); $poller_data = array(); if (!empty($check['info']['last_result'])) { foreach ($check['info']['last_result'] as $a => $l) { $poller_data[] = "$a: $l"; } } $poller_data = implode('
', $poller_data); $rra_updated = ''; if (isset($check['info']['rra_timestamp2'])) { $rra_updated = $check['info']['rra_timestamp2'] != '' ? 1 : ''; } $issue = ''; if (isset($check['issue'])) { $issue = $check['issue']; } $fields = array( array('name' => 'owner', 'title' => __('RRD Owner'), 'icon' => '-'), array('name' => 'runas_website', 'title' => __('Website runs as')), array('name' => 'runas_poller', 'title' => __('Poller runs as')), array('name' => 'rrd_folder_writable', 'title' => __('Is RRA Folder writeable by poller?'), 'value' => dirname($real_pth)), array('name' => 'rrd_writable', 'title' => __('Is RRD writeable by poller?'), 'value' => $real_pth), array('name' => 'rrd_exists', 'title' => __('Does the RRD Exist?')), array('name' => 'active', 'title' => __('Is the Data Source set as Active?')), array('name' => 'last_result', 'title' => __('Did the poller receive valid data?'), 'value' => $poller_data), array('name' => 'rra_updated', 'title' => __('Was the RRD File updated?'), 'value' => '', 'icon' => $rra_updated), array('name' => 'rra_timestamp', 'title' => __('First Check TimeStamp'), 'icon' => '-'), array('name' => 'rra_timestamp2', 'title' => __('Second Check TimeStamp'), 'icon' => '-'), array('name' => 'convert_name', 'title' => __('Were we able to convert the title?'), 'value' => get_data_source_title($check['datasource'])), array('name' => 'rrd_match', 'title' => __('Does the RRA Profile match the RRD File structure?'), 'value' => ''), array('name' => 'issue', 'title' => __('Issue'), 'value' => $issue, 'icon' => '-'), ); html_start_box(__('Data Source Debugger'), '', '', '2', 'center', ''); html_header(array(__('Check'), __('Value'), __('Results'))); $i = 1; foreach ($fields as $field) { $field_name = $field['name']; form_alternate_row('line' . $i); form_selectable_cell($field['title'], $i); $value = ''; $icon = ''; if (array_key_exists($field_name, $check['info'])) { $value = $check['info'][$field_name]; $icon = debug_icon($check['info'][$field_name]); } if (array_key_exists('value', $field)) { $value = $field['value']; } if (array_key_exists('icon', $field)) { $icon = $field['icon']; } $value_title = $value; if (strlen($value) > 100) { $value = substr($value, 0, 100); } form_selectable_cell($value, $i, '', '', $value_title); form_selectable_cell($icon, $i); form_end_row(); $i++; } html_end_box(false); /* print "
";
	if (isset($check) && is_array($check)) {
		print_r($check);
	}
	print "
"; */ } function debug_icon($result) { if ($result === '' || $result === false) { return ''; } if ($result === '-') { return ''; } if ($result === 1 || $result === 'on') { return ''; } if ($result === 0 || $result === 'off') { return ''; } return ''; }