__('Delete'), 3 => __('Change Device'), 8 => __('Reapply Suggested Names'), 6 => __('Enable'), 7 => __('Disable') ); $ds_actions = api_plugin_hook_function('data_source_action_array', $ds_actions); /* set default action */ set_default_action(); switch (get_request_var('action')) { case 'save': form_save(); break; case 'actions': form_actions(); break; case 'rrd_add': ds_rrd_add(); break; case 'rrd_remove': ds_rrd_remove(); break; case 'data_edit': top_header(); data_edit(); bottom_footer(); break; case 'ds_remove': ds_remove(); header ('Location: data_sources.php'); break; case 'ds_edit': ds_edit(); break; case 'ajax_hosts': get_allowed_ajax_hosts(); break; case 'ajax_hosts_noany': get_allowed_ajax_hosts(false); break; default: top_header(); ds(); bottom_footer(); break; } /* -------------------------- The Save Function -------------------------- */ function form_save() { if ((isset_request_var('save_component_data_source_new')) && (!isempty_request_var('data_template_id'))) { $save['id'] = get_filter_request_var('local_data_id'); $save['host_id'] = get_filter_request_var('host_id'); $save['data_template_id'] = get_filter_request_var('data_template_id'); $local_data_id = sql_save($save, 'data_local'); change_data_template($local_data_id, get_request_var('data_template_id')); /* update the title cache */ update_data_source_title_cache($local_data_id); /* update host data */ if (!isempty_request_var('host_id')) { push_out_host(get_request_var('host_id'), $local_data_id); } } if ((isset_request_var('save_component_data')) && (!is_error_message())) { /* ================= input validation ================= */ get_filter_request_var('data_template_data_id'); /* ==================================================== */ /* ok, first pull out all 'input' values so we know how much to save */ $input_fields = db_fetch_assoc_prepared("SELECT data_template_data.data_input_id, data_local.host_id, data_input_fields.id, data_input_fields.input_output, data_input_fields.data_name, data_input_fields.regexp_match, data_input_fields.allow_nulls, data_input_fields.type_code FROM data_template_data LEFT JOIN data_input_fields ON (data_input_fields.data_input_id = data_template_data.data_input_id) LEFT JOIN data_local ON (data_template_data.local_data_id = data_local.id) WHERE data_template_data.id = ? AND data_input_fields.input_output='in'", array(get_request_var('data_template_data_id'))); if (sizeof($input_fields)) { foreach ($input_fields as $input_field) { if (isset_request_var('value_' . $input_field['id'])) { /* save the data into the 'data_input_data' table */ $form_value = get_nfilter_request_var('value_' . $input_field['id']); /* we shouldn't enforce rules on fields the user cannot see (ie. templated ones) */ $data_template_id = db_fetch_cell_prepared('SELECT local_data_template_data_id FROM data_template_data WHERE id = ?', array(get_request_var('data_template_data_id'))); $is_templated = db_fetch_cell_prepared('SELECT t_value FROM data_input_data WHERE data_input_field_id = ? AND data_template_data_id = ?', array($input_field['id'], $data_template_id)); if ($is_templated == '') { $allow_nulls = true; }elseif ($input_field['allow_nulls'] == 'on') { $allow_nulls = true; }elseif (empty($input_field['allow_nulls'])) { $allow_nulls = false; } /* run regexp match on input string */ $form_value = form_input_validate($form_value, 'value_' . $input_field['id'], $input_field['regexp_match'], $allow_nulls, 3); if (!is_error_message()) { db_execute_prepared("REPLACE INTO data_input_data (data_input_field_id, data_template_data_id, t_value, value) VALUES (?, ?, '', ?)", array($input_field['id'], get_request_var('data_template_data_id'), $form_value)); } } } } } if ((isset_request_var('save_component_data_source')) && (!is_error_message())) { /* ================= input validation ================= */ get_filter_request_var('current_rrd'); get_filter_request_var('rrd_step'); get_filter_request_var('data_input_id'); get_filter_request_var('host_id'); get_filter_request_var('_host_id'); get_filter_request_var('_data_template_id'); /* ==================================================== */ $save1['id'] = get_filter_request_var('local_data_id'); $save1['data_template_id'] = get_filter_request_var('data_template_id'); $save1['host_id'] = get_filter_request_var('host_id'); $save2['id'] = get_filter_request_var('data_template_data_id'); $save2['local_data_template_data_id'] = get_filter_request_var('local_data_template_data_id'); $save2['data_template_id'] = get_filter_request_var('data_template_id'); $save2['data_input_id'] = form_input_validate(get_request_var('data_input_id'), 'data_input_id', '^[0-9]+$', true, 3); $save2['name'] = form_input_validate(get_nfilter_request_var('name'), 'name', '', false, 3); $save2['data_source_path'] = form_input_validate(get_nfilter_request_var('data_source_path'), 'data_source_path', '', true, 3); $save2['active'] = form_input_validate((isset_request_var('active') ? get_nfilter_request_var('active') : ''), 'active', '', true, 3); $save2['rrd_step'] = form_input_validate(get_request_var('rrd_step'), 'rrd_step', '^[0-9]+$', false, 3); if (!is_error_message()) { $local_data_id = sql_save($save1, 'data_local'); $save2['local_data_id'] = $local_data_id; $data_template_data_id = sql_save($save2, 'data_template_data'); if ($data_template_data_id) { raise_message(1); }else{ raise_message(2); } } if (!is_error_message()) { /* if this is a new data source and a template has been selected, skip item creation this time otherwise it throws off the templatate creation because of the NULL data */ if (!isempty_request_var('local_data_id') || isempty_request_var('data_template_id')) { /* if no template was set before the save, there will be only one data source item to save; otherwise there might be >1 */ if (isempty_request_var('_data_template_id')) { $rrds[0]['id'] = get_nfilter_request_var('current_rrd'); }else{ $rrds = db_fetch_assoc_prepared('SELECT id FROM data_template_rrd WHERE local_data_id = ?', array(get_filter_request_var('local_data_id'))); } if (sizeof($rrds)) { foreach ($rrds as $rrd) { if (isempty_request_var('_data_template_id')) { $name_modifier = ''; }else{ $name_modifier = '_' . $rrd['id']; } $save3['id'] = $rrd['id']; $save3['local_data_id'] = $local_data_id; $save3['local_data_template_rrd_id'] = db_fetch_cell_prepared('SELECT local_data_template_rrd_id FROM data_template_rrd WHERE id = ?', array($rrd['id'])); $save3['data_template_id'] = get_filter_request_var('data_template_id'); $save3['rrd_maximum'] = form_input_validate(get_nfilter_request_var("rrd_maximum$name_modifier"), "rrd_maximum$name_modifier", "^(-?([0-9]+(\.[0-9]*)?|[0-9]*\.[0-9]+)([eE][+\-]?[0-9]+)?)|U$|\|query_ifSpeed\||\|query_ifHighSpeed\|", false, 3); $save3['rrd_minimum'] = form_input_validate(get_nfilter_request_var("rrd_minimum$name_modifier"), "rrd_minimum$name_modifier", "^(-?([0-9]+(\.[0-9]*)?|[0-9]*\.[0-9]+)([eE][+\-]?[0-9]+)?)|U$|\|query_ifSpeed\||\|query_ifHighSpeed\|", false, 3); $save3['rrd_heartbeat'] = form_input_validate(get_nfilter_request_var("rrd_heartbeat$name_modifier"), "rrd_heartbeat$name_modifier", '^[0-9]+$', false, 3); $save3['data_source_type_id'] = form_input_validate(get_nfilter_request_var("data_source_type_id$name_modifier"), "data_source_type_id$name_modifier", '^[0-9]+$', false, 3); $save3['data_source_name'] = form_input_validate(get_nfilter_request_var("data_source_name$name_modifier"), "data_source_name$name_modifier", '^[a-zA-Z0-9_-]{1,19}$', false, 3); $save3['data_input_field_id'] = form_input_validate((isset_request_var("data_input_field_id$name_modifier") ? get_nfilter_request_var("data_input_field_id$name_modifier") : '0'), "data_input_field_id$name_modifier", '', true, 3); $data_template_rrd_id = sql_save($save3, 'data_template_rrd'); if ($data_template_rrd_id) { raise_message(1); }else{ raise_message(2); } } } } } if (!is_error_message()) { if (get_request_var('data_template_id') != get_request_var('_data_template_id')) { /* update all necessary template information */ change_data_template($local_data_id, get_request_var('data_template_id')); }elseif (!isempty_request_var('data_template_id')) { update_data_source_data_query_cache($local_data_id); } if (get_request_var('host_id') != get_request_var('_host_id')) { /* push out all necessary host information */ push_out_host(get_request_var('host_id'), $local_data_id); /* reset current host for display purposes */ $_SESSION['sess_data_source_current_host_id'] = get_request_var('host_id'); } /* if no data source path has been entered, generate one */ if (isempty_request_var('data_source_path')) { generate_data_source_path($local_data_id); } /* update the title cache */ update_data_source_title_cache($local_data_id); } } /* update the poller cache last to make sure everything is fresh */ if ((!is_error_message()) && (!empty($local_data_id))) { update_poller_cache($local_data_id, true); } if (isset_request_var('save_component_data_source_new') && isempty_request_var('data_template_id')) { header('Location: data_sources.php?header=false&action=ds_edit&host_id=' . get_request_var('host_id') . '&new=1'); }elseif ((is_error_message()) || (get_filter_request_var('data_template_id') != get_filter_request_var('_data_template_id')) || (get_filter_request_var('data_input_id') != get_filter_request_var('_data_input_id')) || (get_filter_request_var('host_id') != get_filter_request_var('_host_id'))) { header('Location: data_sources.php?header=false&action=ds_edit&id=' . (empty($local_data_id) ? get_filter_request_var('local_data_id') : $local_data_id) . '&host_id=' . get_request_var('host_id') . '&view_rrd=' . (isset_request_var('current_rrd') ? get_nfilter_request_var('current_rrd') : '0')); }else{ header('Location: data_sources.php?header=false'); } } /* ------------------------ The "actions" function ------------------------ */ function form_actions() { global $ds_actions; /* ================= input validation ================= */ get_filter_request_var('drp_action', FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^([a-zA-Z0-9_]+)$/'))); /* ==================================================== */ /* if we are to save this form, instead of display it */ if (isset_request_var('selected_items')) { $selected_items = sanitize_unserialize_selected_items(get_nfilter_request_var('selected_items')); if ($selected_items != false) { if (get_nfilter_request_var('drp_action') == '1') { /* delete */ if (!isset_request_var('delete_type')) { set_request_var('delete_type', 1); }else{ get_filter_request_var('delete_type'); } switch (get_request_var('delete_type')) { case '2': /* delete all graph items tied to this data source */ $data_template_rrds = array_rekey(db_fetch_assoc('SELECT id FROM data_template_rrd WHERE ' . array_to_sql_or($selected_items, 'local_data_id')), 'id', 'id'); /* loop through each data source item */ if (sizeof($data_template_rrds) > 0) { db_execute('DELETE FROM graph_templates_item WHERE task_item_id IN (' . implode(',', $data_template_rrds) . ') and local_graph_id > 0'); } api_plugin_hook_function('graph_items_remove', $data_template_rrds); break; case '3': /* delete all graphs tied to this data source */ $graphs = array_rekey(db_fetch_assoc('SELECT graph_templates_graph.local_graph_id FROM (data_template_rrd,graph_templates_item,graph_templates_graph) WHERE graph_templates_item.task_item_id=data_template_rrd.id AND graph_templates_item.local_graph_id=graph_templates_graph.local_graph_id AND ' . array_to_sql_or($selected_items, 'data_template_rrd.local_data_id') . ' AND graph_templates_graph.local_graph_id > 0 GROUP BY graph_templates_graph.local_graph_id'), 'local_graph_id', 'local_graph_id'); if (sizeof($graphs) > 0) { api_graph_remove_multi($graphs); } api_plugin_hook_function('graphs_remove', $graphs); break; } api_data_source_remove_multi($selected_items); api_plugin_hook_function('data_source_remove', $selected_items); }elseif (get_nfilter_request_var('drp_action') == '3') { /* change host */ get_filter_request_var('host_id'); for ($i=0;($i'; $ds_array[$i] = $matches[1]; $i++; } } top_header(); form_start('data_sources.php'); html_start_box($ds_actions{get_nfilter_request_var('drp_action')}, '60%', '', '3', 'center', ''); if (isset($ds_array) && sizeof($ds_array)) { if (get_nfilter_request_var('drp_action') == '1') { /* delete */ $graphs = array(); /* find out which (if any) graphs are using this data source, so we can tell the user */ if (isset($ds_array)) { $graphs = db_fetch_assoc('SELECT graph_templates_graph.local_graph_id, graph_templates_graph.title_cache FROM (data_template_rrd,graph_templates_item,graph_templates_graph) WHERE graph_templates_item.task_item_id=data_template_rrd.id AND graph_templates_item.local_graph_id=graph_templates_graph.local_graph_id AND ' . array_to_sql_or($ds_array, 'data_template_rrd.local_data_id') . ' AND graph_templates_graph.local_graph_id > 0 GROUP BY graph_templates_graph.local_graph_id ORDER BY graph_templates_graph.title_cache'); } print "

" . __n('Click \'Continue\' to delete the following Data Source', 'Click \'Continue\' to delete following Data Sources', sizeof($ds_array)) . "

"; if (sizeof($graphs)) { print "

" . __n('The following graph is using these data sources:', 'The following graphs are using these data sources:', sizeof($graphs)) . "

\n"; print '
'; print '
'; form_radio_button('delete_type', '3', '1', __n('Leave the Graph untouched.', 'Leave all Graphs untouched.', sizeof($graphs)), '1'); print '
'; form_radio_button('delete_type', '3', '2', __n('Delete all Graph Items that reference this Data Source.', 'Delete all Graph Items that reference these Data Sources.', sizeof($ds_array)), '1'); print '
'; form_radio_button('delete_type', '3', '3', __n('Delete all Graphs that reference this Data Source.', 'Delete all Graphs that reference these Data Sources.', sizeof($ds_array)), '1'); print '
'; print ''; } print " \n"; $save_html = " "; }elseif (get_nfilter_request_var('drp_action') == '3') { /* change host */ print "

" . __n('Choose a new Device for this Data Source and click \'Continue\'.', 'Choose a new Device for these Data Sources and click \'Continue\'', sizeof($ds_array)) . "

" . __('New Device:') . "
"; form_dropdown('host_id', db_fetch_assoc("SELECT id, CONCAT_WS('',description,' (',hostname,')') AS name FROM host ORDER BY description, hostname"),'name','id','','','0'); print "

\n"; $save_html = " "; }elseif (get_nfilter_request_var('drp_action') == '6') { /* data source enable */ print "

" . __n('Click \'Continue\' to enable the following Data Source.', 'Click \'Continue\' to enable all following Data Sources.', sizeof($ds_array)) . "

\n"; $save_html = " "; }elseif (get_nfilter_request_var('drp_action') == '7') { /* data source disable */ print "

" . __n('Click \'Continue\' to disable the following Data Source.', 'Click \'Continue\' to disable all following Data Sources.', sizeof($ds_array)) . "

\n"; $save_html = " "; }elseif (get_nfilter_request_var('drp_action') == '8') { /* reapply suggested data source naming */ print "

" . __n('Click \'Continue\' to re-apply the suggested name to the following Data Source.', 'Click \'Continue\' to re-apply the suggested names to all following Data Sources.', sizeof($ds_array)) . "

\n"; $save_html = " "; }else{ $save['drp_action'] = get_nfilter_request_var('drp_action'); $save['ds_list'] = $ds_list; $save['ds_array'] = (isset($ds_array)? $ds_array : array()); api_plugin_hook_function('data_source_action_prepare', $save); $save_html = " "; } }else{ print "" . __('You must select at least one data source.') . "\n"; $save_html = ""; } print " $save_html \n"; html_end_box(); form_end(); bottom_footer(); } /* ---------------------------- data - Custom Data ---------------------------- */ function data_edit() { /* ================= input validation ================= */ get_filter_request_var('id'); /* ==================================================== */ global $config; if (!isempty_request_var('id')) { $data = db_fetch_row_prepared('SELECT id, data_input_id, data_template_id, name, local_data_id FROM data_template_data WHERE local_data_id = ?', array(get_request_var('id'))); $template_data = db_fetch_row_prepared('SELECT id, data_input_id FROM data_template_data WHERE data_template_id = ? AND local_data_id = 0', array($data['data_template_id'])); $host = db_fetch_row_prepared('SELECT host.id, host.hostname FROM (data_local, host) WHERE data_local.host_id = host.id and data_local.id = ?', array(get_request_var('id'))); } form_start('data_sources.php'); $i = 0; if (!empty($data['data_input_id'])) { /* get each INPUT field for this data input source */ $fields = db_fetch_assoc_prepared("SELECT * FROM data_input_fields WHERE data_input_id = ? AND input_output = 'in' ORDER BY name", array($data['data_input_id'])); html_start_box( __('Custom Data [data input: %s]', htmlspecialchars(db_fetch_cell_prepared('SELECT name FROM data_input WHERE id = ?', array($data['data_input_id']))) ),'100%', '', '3', 'center', ''); /* loop through each field found */ if (sizeof($fields) > 0) { foreach ($fields as $field) { $data_input_data = db_fetch_row_prepared('SELECT * FROM data_input_data WHERE data_template_data_id = ? AND data_input_field_id = ?', array($data['id'], $field['id'])); if (sizeof($data_input_data) > 0) { $old_value = $data_input_data['value']; }else{ $old_value = ''; } /* if data template then get t_value FROM template, else always allow user input */ if (empty($data['data_template_id'])) { $can_template = 'on'; }else{ $can_template = db_fetch_cell_prepared('SELECT t_value FROM data_input_data WHERE data_template_data_id = ? AND data_input_field_id = ?', array($template_data['id'], $field['id'])); } form_alternate_row(); if ((!empty($host['id'])) && (preg_match('/^' . VALID_HOST_FIELDS . '$/i', $field['type_code']))) { print "" . $field['name'] . ' ' . __('(From Device: %s)', $host['hostname']) . "\n"; print "$old_value\n"; }elseif (empty($can_template)) { print "" . $field['name'] . ' ' . __('(From Data Template)') . "\n"; print '' . (empty($old_value) ? __('Nothing Entered') : $old_value) . "\n"; }else{ print "" . $field['name'] . "\n"; print ''; draw_custom_data_row('value_' . $field['id'], $field['id'], $data['id'], $old_value); print ''; } print "\n"; $i++; } }else{ print '' . __('No Input Fields for the Selected Data Input Source') . ''; } html_end_box(); } form_hidden_box('local_data_id', (isset($data) ? $data['local_data_id'] : '0'), ''); form_hidden_box('data_template_data_id', (isset($data) ? $data['id'] : '0'), ''); form_hidden_box('save_component_data', '1', ''); } /* ------------------------ Data Source Functions ------------------------ */ function ds_rrd_remove() { /* ================= input validation ================= */ get_filter_request_var('id'); /* ==================================================== */ db_execute_prepared('DELETE FROM data_template_rrd WHERE id = ?', array(get_request_var('id'))); db_execute_prepared('UPDATE graph_templates_item SET task_item_id = 0 WHERE task_item_id = ?', array(get_request_var('id'))); header('Location: data_sources.php?header=false&action=ds_edit&id=' . get_request_var('local_data_id')); } function ds_rrd_add() { /* ================= input validation ================= */ get_filter_request_var('id'); /* ==================================================== */ db_execute_prepared("INSERT INTO data_template_rrd (local_data_id, rrd_maximum, rrd_minimum, rrd_heartbeat, data_source_type_id, data_source_name) VALUES (?, 100, 0, 600, 1, 'ds')", array(get_request_var('id'))); $data_template_rrd_id = db_fetch_insert_id(); header('Location: data_sources.php?header=false&action=ds_edit&id=' . get_request_var('id') . "&view_rrd=$data_template_rrd_id"); } function ds_edit() { global $struct_data_source, $struct_data_source_item, $data_source_types; /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('host_id'); /* ==================================================== */ api_plugin_hook('data_source_edit_top'); $use_data_template = true; $host_id = 0; if (!isempty_request_var('id')) { $data_local = db_fetch_row_prepared('SELECT host_id, data_template_id FROM data_local WHERE id = ?', array(get_request_var('id'))); $data = db_fetch_row_prepared('SELECT * FROM data_template_data WHERE local_data_id = ?', array(get_request_var('id'))); if (isset($data_local['data_template_id']) && $data_local['data_template_id'] >= 0) { $data_template = db_fetch_row_prepared('SELECT id, name FROM data_template WHERE id = ?', array($data_local['data_template_id'])); $data_template_data = db_fetch_row_prepared('SELECT * FROM data_template_data WHERE data_template_id = ? AND local_data_id = 0', array($data_local['data_template_id'])); } else { $_SESSION['sess_messages'] = __('Data Source %d does not exist.', get_request_var('id')); header ('Location: data_sources.php'); exit; } $header_label = __('Data Template Selection [edit: %s]', htmlspecialchars(get_data_source_title(get_request_var('id')))); if (empty($data_local['data_template_id'])) { $use_data_template = false; } }else{ $header_label = __('Data Template Selection [new]'); $use_data_template = false; } /* handle debug mode */ if (isset_request_var('debug')) { if (get_nfilter_request_var('debug') == '0') { kill_session_var('ds_debug_mode'); }elseif (get_nfilter_request_var('debug') == '1') { $_SESSION['ds_debug_mode'] = true; } } /* handle debug mode */ if (isset_request_var('info')) { if (get_nfilter_request_var('info') == '0') { kill_session_var('ds_info_mode'); }elseif (get_nfilter_request_var('info') == '1') { $_SESSION['ds_info_mode'] = true; } } top_header(); if (!isempty_request_var('id')) { ?>
*'>
*'>
*'>
*'>

array( 'method' => 'drop_sql', 'friendly_name' => __('Selected Data Template'), 'description' => __('The name given to this data template. Please note that you may only change Draph Templates to a 100% compatible Draph Template, which means that it includes identical Data Sources.'), 'value' => (isset($data_template) ? $data_template['id'] : '0'), 'none_value' => (isset($data_template) ? '':'None'), 'sql' => $dtsql ), 'host_id' => array( 'method' => 'drop_callback', 'friendly_name' => __('Device'), 'description' => __('Choose the Device that this Data Source belongs to.'), 'none_value' => 'None', 'sql' => 'SELECT id, description as name FROM host ORDER BY name', 'action' => 'ajax_hosts_noany', 'id' => (isset_request_var('host_id') ? get_request_var('host_id') : (isset($data_local['host_id']) ? $data_local['host_id']:0)), 'value' => db_fetch_cell_prepared('SELECT description FROM host WHERE id = ?', (isset_request_var('host_id') ? array(get_request_var('host_id')) : (isset($data_local['host_id']) ? array($data_local['host_id']):array(0)))), ), '_data_template_id' => array( 'method' => 'hidden', 'value' => (isset($data_template) ? $data_template['id'] : '0') ), '_host_id' => array( 'method' => 'hidden', 'value' => (empty($data_local['host_id']) ? (isset_request_var('host_id') ? get_request_var('host_id') : '0') : $data_local['host_id']) ), '_data_input_id' => array( 'method' => 'hidden', 'value' => (isset($data['data_input_id']) ? $data['data_input_id'] : '0') ), 'data_template_data_id' => array( 'method' => 'hidden', 'value' => (isset($data) ? $data['id'] : '0') ), 'local_data_template_data_id' => array( 'method' => 'hidden', 'value' => (isset($data) ? $data['local_data_template_data_id'] : '0') ), 'local_data_id' => array( 'method' => 'hidden', 'value' => (isset($data) ? $data['local_data_id'] : '0') ), ); draw_edit_form(array( 'config' => array('no_form_tag' => true), 'fields' => $form_array ) ); html_end_box(); /* only display the "inputs" area if we are using a data template for this data source */ if (!empty($data['data_template_id'])) { $template_data_rrds = db_fetch_assoc_prepared('SELECT * FROM data_template_rrd WHERE local_data_id = ? ORDER BY data_source_name', array(get_request_var('id'))); html_start_box( __('Supplemental Data Template Data'), '100%', '', '3', 'center', ''); draw_nontemplated_fields_data_source($data['data_template_id'], $data['local_data_id'], $data, '|field|', __('Data Source Fields'), true, true, 0); draw_nontemplated_fields_data_source_item($data['data_template_id'], $template_data_rrds, '|field|_|id|', __('Data Source Item Fields'), true, true, true, 0); draw_nontemplated_fields_custom_data($data['id'], 'value_|id|', __('Custom Data'), true, true, 0); form_hidden_box('save_component_data','1',''); html_end_box(); } if (((isset_request_var('id')) || (isset_request_var('new'))) && (empty($data['data_template_id']))) { html_start_box( __('Data Source'), '100%', '', '3', 'center', ''); $form_array = array(); while (list($field_name, $field_array) = each($struct_data_source)) { $form_array += array($field_name => $struct_data_source[$field_name]); if (!(($use_data_template == false) || (!empty($data_template_data{'t_' . $field_name})) || ($field_array['flags'] == 'NOTEMPLATE'))) { $form_array[$field_name]['description'] = ''; } $form_array[$field_name]['value'] = (isset($data[$field_name]) ? $data[$field_name] : ''); $form_array[$field_name]['form_id'] = (empty($data['id']) ? '0' : $data['id']); if (!(($use_data_template == false) || (!empty($data_template_data{'t_' . $field_name})) || ($field_array['flags'] == 'NOTEMPLATE'))) { $form_array[$field_name]['method'] = 'template_' . $form_array[$field_name]['method']; } } draw_edit_form(array( 'config' => array('no_form_tag' => true), 'fields' => inject_form_variables($form_array, (isset($data) ? $data : array())) ) ); html_end_box(); /* fetch ALL rrd's for this data source */ if (!isempty_request_var('id')) { $template_data_rrds = db_fetch_assoc_prepared('SELECT id, data_source_name FROM data_template_rrd WHERE local_data_id = ? ORDER BY data_source_name', array(get_request_var('id'))); } /* select the first "rrd" of this data source by default */ if (isempty_request_var('view_rrd')) { set_request_var('view_rrd', (isset($template_data_rrds[0]['id']) ? $template_data_rrds[0]['id'] : '0')); } /* get more information about the rrd we chose */ if (!isempty_request_var('view_rrd')) { $local_data_template_rrd_id = db_fetch_cell_prepared('SELECT local_data_template_rrd_id FROM data_template_rrd WHERE id = ?', array(get_request_var('view_rrd'))); $rrd = db_fetch_row_prepared('SELECT * FROM data_template_rrd WHERE id = ?', array(get_request_var('view_rrd'))); $rrd_template = db_fetch_row_prepared('SELECT * FROM data_template_rrd WHERE id = ?', array($local_data_template_rrd_id)); $header_label = '[edit: ' . $rrd['data_source_name'] . ']'; }else{ $header_label = ''; } $i = 0; if (isset($template_data_rrds)) { if (sizeof($template_data_rrds) > 1) { /* draw the data source tabs on the top of the page */ print " \n"; foreach ($template_data_rrds as $template_data_rrd) { $i++; print " \n"; print "\n"; } print "
$i: " . htmlspecialchars($template_data_rrd['data_source_name']) . '' . (($use_data_template == false) ? " " : '') . "
\n"; }elseif (sizeof($template_data_rrds) == 1) { set_request_var('view_rrd', $template_data_rrds[0]['id']); } } html_start_box('', '100%', '', '3', 'center', ''); print " " . __('Data Source Item %s', $header_label) . " " . ((!isempty_request_var('id') && (empty($data_template['id']))) ? "" . __('New') . " " : '') . " \n"; /* data input fields list */ if ((empty($data['data_input_id'])) || (db_fetch_cell_prepared('SELECT type_id FROM data_input WHERE id = ?', array($data['data_input_id'])) > '1')) { unset($struct_data_source_item['data_input_field_id']); }else{ $struct_data_source_item['data_input_field_id']['sql'] = "SELECT id,CONCAT(data_name,' - ',name) as name FROM data_input_fields WHERE data_input_id=" . $data['data_input_id'] . " and input_output='out' and update_rra='on' order by data_name,name"; } $form_array = array(); while (list($field_name, $field_array) = each($struct_data_source_item)) { $form_array += array($field_name => $struct_data_source_item[$field_name]); if (!(($use_data_template == false) || ($rrd_template{'t_' . $field_name} == 'on'))) { $form_array[$field_name]['description'] = ''; } $form_array[$field_name]['value'] = (isset($rrd) ? $rrd[$field_name] : ''); if (!(($use_data_template == false) || ($rrd_template{'t_' . $field_name} == 'on'))) { $form_array[$field_name]['method'] = 'template_' . $form_array[$field_name]['method']; } } draw_edit_form(array( 'config' => array('no_form_tag' => true), 'fields' => array( 'data_template_rrd_id' => array( 'method' => 'hidden', 'value' => (isset($rrd) ? $rrd['id'] : '0') ), 'local_data_template_rrd_id' => array( 'method' => 'hidden', 'value' => (isset($rrd) ? $rrd['local_data_template_rrd_id'] : '0') ) ) + $form_array ) ); html_end_box(); /* data source data goes here */ data_edit(); form_hidden_box('current_rrd', get_request_var('view_rrd'), '0'); } /* display the debug mode box if the user wants it */ if ((isset($_SESSION['ds_debug_mode'])) && (isset_request_var('id'))) { ?>

' . __('External') . ''; }else if ($seconds < 60) { return '' . __('%d Seconds', $seconds) . ''; }else if ($seconds == 60) { return __('1 Minute'); }else{ return '' . __('%d Minutes', ($seconds / 60)) . ''; } } function ds() { global $ds_actions, $item_rows, $sampling_intervals; /* ================= 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' ), 'rfilter' => array( 'filter' => FILTER_VALIDATE_IS_REGEX, 'pageset' => true, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'sort_column' => array( 'filter' => FILTER_CALLBACK, 'default' => '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' ), 'status' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'template_id' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'profile' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ), 'orphans' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '-1' ) ); validate_store_request_vars($filters, 'sess_ds'); /* ================= input validation ================= */ if (get_request_var('rows') == -1) { $rows = read_config_option('num_rows_table'); }else{ $rows = get_request_var('rows'); } if (get_request_var('host_id') > 0) { $host = db_fetch_row_prepared('SELECT hostname FROM host WHERE id = ?', array(get_request_var('host_id'))); }else{ $host = array(); } ?>
' title=''> ' title=''>
' onChange='applyFilter()'>
'>
0'; }elseif (get_request_var('orphans') == 1) { $sql_having = 'HAVING deletable=0'; }else{ $sql_having = ''; } $total_rows = sizeof(db_fetch_assoc("SELECT dl.id, COUNT(DISTINCT gti.local_graph_id) AS deletable FROM data_local AS dl INNER JOIN data_template_data AS dtd ON dl.id=dtd.local_data_id LEFT JOIN data_template AS dt ON (dl.data_template_id=dt.id) LEFT JOIN data_template_rrd AS dtr ON dtr.local_data_id=dtd.local_data_id LEFT JOIN graph_templates_item AS gti ON (gti.task_item_id=dtr.id) $sql_where1 GROUP BY dl.id $sql_having")); $data_sources = db_fetch_assoc("SELECT dtd.local_data_id, dtd.name_cache, dtd.active, dtd.rrd_step, dt.name AS data_template_name, dl.host_id, COUNT(DISTINCT gti.local_graph_id) AS deletable FROM data_local AS dl INNER JOIN data_template_data AS dtd ON dl.id=dtd.local_data_id LEFT JOIN data_template AS dt ON dl.data_template_id=dt.id LEFT JOIN data_template_rrd AS dtr ON dtr.local_data_id=dtd.local_data_id LEFT JOIN graph_templates_item AS gti ON (gti.task_item_id=dtr.id) $sql_where1 GROUP BY dl.id $sql_having ORDER BY ". get_request_var('sort_column') . ' ' . get_request_var('sort_direction') . ' LIMIT ' . ($rows*(get_request_var('page')-1)) . ',' . $rows); $nav = html_nav_bar('data_sources.php?rfilter=' . get_request_var('rfilter') . '&host_id=' . get_request_var('host_id'), MAX_DISPLAY_PAGES, get_request_var('page'), $rows, $total_rows, 7, __('Data Sources'), 'page', 'main'); form_start('data_sources.php', 'chk'); print $nav; html_start_box('', '100%', '', '3', 'center', ''); $display_text = array( 'name_cache' => array('display' => __('Data Source Name'), 'align' => 'left', 'sort' => 'ASC', 'tip' => __('The name of this Data Source. Generally programtically generated from the Data Template definition.')), 'local_data_id' => array('display' => __('ID'),'align' => 'right', 'sort' => 'ASC', 'tip' => __('The internal database ID for this Data Source. Useful when performing automation or debugging.')), 'nosort' => array('display' => __('Poller Interval'), 'align' => 'left', 'sort' => 'ASC', 'tip' => __('The frequency that data is collected for this Data Source.')), 'nosort1' => array('display' => __('Deletable'), 'align' => 'left', 'sort' => 'ASC', 'tip' => __('If this Data Source is no long in use by Graphs, it can be Deleted.')), 'active' => array('display' => __('Active'), 'align' => 'left', 'sort' => 'ASC', 'tip' => __('Whether or not data will be collected for this Data Source. Controlled at the Data Template level.')), 'data_template_name' => array('display' => __('Template Name'), 'align' => 'left', 'sort' => 'ASC', 'tip' => __('The Data Template that this Data Source was based upon.'))); html_header_sort_checkbox($display_text, get_request_var('sort_column'), get_request_var('sort_direction'), false); $i = 0; if (sizeof($data_sources)) { foreach ($data_sources as $data_source) { if ($data_source['deletable'] > 0) { $disabled = true; }else{ $disabled = false; } $data_source['data_template_name'] = htmlspecialchars($data_source['data_template_name']); $data_name_cache = title_trim(htmlspecialchars($data_source['name_cache']), read_config_option('max_title_length')); if (get_request_var('rfilter') != '') { $data_name_cache = filter_value($data_name_cache, get_request_var('rfilter')); } /* keep copy of data source for comparison */ $data_source_orig = $data_source; $data_source = api_plugin_hook_function('data_sources_table', $data_source); /* we're escaping strings here, so no need to escape them on form_selectable_cell */ if (empty($data_source['data_template_name'])) { $data_template_name = '' . __('None') . ''; } elseif ($data_source_orig['data_template_name'] != $data_source['data_template_name']) { /* was changed by plugin, plugin has to take care for html-escaping */ $data_template_name = $data_source['data_template_name']; } elseif (get_request_var('rfilter') != '') { $data_template_name = filter_value($data_source['data_template_name'], get_request_var('rfilter')); } else { $data_template_name = htmlspecialchars($data_source['data_template_name']); } form_alternate_row('line' . $data_source['local_data_id'], true, $disabled); form_selectable_cell(filter_value(title_trim($data_source['name_cache'], read_config_option('max_title_length')), get_request_var('rfilter'), 'data_sources.php?action=ds_edit&id=' . $data_source['local_data_id']), $data_source['local_data_id']); form_selectable_cell($data_source['local_data_id'], $data_source['local_data_id'], '', 'text-align:right'); form_selectable_cell(get_poller_interval($data_source['rrd_step']), $data_source['local_data_id']); form_selectable_cell(($data_source['deletable'] == '0' ? __('Yes') : __('No')), $data_source['local_data_id']); form_selectable_cell(($data_source['active'] == 'on' ? __('Yes') : __('No')), $data_source['local_data_id']); form_selectable_cell($data_template_name, $data_source['local_data_id']); form_checkbox_cell($data_source['name_cache'], $data_source['local_data_id'], $disabled); form_end_row(); } }else{ print "" . __('No Data Sources Found') . ""; } html_end_box(false); if (sizeof($data_sources)) { print $nav; } /* draw the dropdown containing a list of available actions for this form */ draw_actions_dropdown($ds_actions); form_end(); }