__('Delete'), 2 => __('Duplicate') ); /* set default action */ set_default_action(); switch (get_request_var('action')) { case 'save': form_save(); break; case 'actions': form_actions(); break; case 'item_remove_confirm': profile_item_remove_confirm(); break; case 'item_remove': profile_item_remove(); break; case 'ajax_span': get_filter_request_var('profile_id'); get_filter_request_var('span'); get_filter_request_var('rows'); $sampling_interval = db_fetch_cell_prepared('SELECT step FROM data_source_profiles WHERE id = ?', array(get_request_var('profile_id'))); if (get_request_var('span') == 1) { print get_span(get_request_var('rows') * $sampling_interval); }else{ print get_span(get_request_var('rows') * get_request_var('span')); } break; case 'ajax_size': get_filter_request_var('id'); get_filter_request_var('cfs'); print get_size(get_request_var('id'), get_nfilter_request_var('type'), get_request_var('cfs')); break; case 'item_edit': top_header(); item_edit(); bottom_footer(); break; case 'edit': top_header(); profile_edit(); bottom_footer(); break; default: top_header(); profile(); bottom_footer(); break; } /* -------------------------- Global Form Functions -------------------------- */ /* -------------------------- The Save Function -------------------------- */ function form_save() { // make sure ids are numeric if (isset_request_var('id') && ! is_numeric(get_filter_request_var('id'))) { set_request_var('id', 0); } if (isset_request_var('profile_id') && ! is_numeric(get_filter_request_var('profile_id'))) { set_request_var('profile_id', 0); } if (isset_request_var('save_component_profile')) { $save['id'] = form_input_validate(get_request_var('id'), 'id', '^[0-9]+$', false, 3); $save['hash'] = get_hash_data_source_profile(get_request_var('id')); $save['name'] = form_input_validate(get_nfilter_request_var('name'), 'name', '', false, 3); if (isset_request_var('step')) { $save['step'] = form_input_validate(get_nfilter_request_var('step'), 'step', '', false, 3); $save['heartbeat'] = form_input_validate(get_nfilter_request_var('heartbeat'), 'heartbeat', '', false, 3); $save['x_files_factor'] = form_input_validate(get_nfilter_request_var('x_files_factor'), 'x_files_factor', '', false, 3); } if (isset_request_var('default')) { $save['default'] = (isset_request_var('default') ? 'on':''); db_execute('UPDATE data_source_profiles SET `default`=""'); } if (!is_error_message()) { $profile_id = sql_save($save, 'data_source_profiles'); if ($profile_id) { if (isset_request_var('step')) { // Validate consolidation functions $cfs = get_nfilter_request_var('consolidation_function_id'); if (sizeof($cfs)) { foreach($cfs as $cf) { input_validate_input_number($cf); } } db_execute('DELETE FROM data_source_profiles_cf WHERE data_source_profile_id = ' . $profile_id . ' AND consolidation_function_id NOT IN (' . implode(',', get_nfilter_request_var('consolidation_function_id')) . ')'); // Validate consolidation functions $cfs = get_nfilter_request_var('consolidation_function_id'); if (sizeof($cfs)) { foreach($cfs as $cf) { db_execute('REPLACE INTO data_source_profiles_cf (data_source_profile_id, consolidation_function_id) VALUES (' . $profile_id . ',' . $cf . ')'); } } } raise_message(1); }else{ raise_message(2); } } header('Location: data_source_profiles.php?header=false&action=edit&id=' . (empty($profile_id) ? get_request_var('id') : $profile_id)); }elseif (isset_request_var('save_component_rra')) { /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('profile_id'); /* ==================================================== */ $sampling_interval = db_fetch_cell_prepared('SELECT step FROM data_source_profiles WHERE id = ?', array(get_request_var('profile_id'))); $save['id'] = form_input_validate(get_request_var('id'), 'id', '^[0-9]+$', false, 3); $save['name'] = form_input_validate(get_nfilter_request_var('name'), 'name', '', true, 3); $save['data_source_profile_id'] = form_input_validate(get_request_var('profile_id'), 'profile_id', '^[0-9]+$', false, 3); $save['steps'] = form_input_validate(get_nfilter_request_var('steps'), 'steps', '^[0-9]+$', false, 3); if ($save['steps'] != '1') { $save['steps'] /= $sampling_interval; } $save['rows'] = form_input_validate(get_nfilter_request_var('rows'), 'rows', '^[0-9]+$', false, 3); if (!is_error_message()) { $profile_rra_id = sql_save($save, 'data_source_profiles_rra'); if ($profile_rra_id) { raise_message(1); }else{ raise_message(2); } } if (is_error_message()) { header('Location: data_source_profiles.php?header=false&action=item_edit&profile_id=' . get_request_var('profile_id') . '&id=' . (empty($profile_rra_id) ? get_request_var('id') : $profile_rra_id)); }else{ header('Location: data_source_profiles.php?header=false&action=edit&id=' . get_request_var('profile_id')); } } } /* ------------------------ The 'actions' function ------------------------ */ function form_actions() { global $profile_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_request_var('drp_action') == '1') { /* delete */ db_execute('DELETE FROM data_source_profiles WHERE ' . array_to_sql_or($selected_items, 'id')); db_execute('DELETE FROM data_source_profiles_rra WHERE ' . array_to_sql_or($selected_items, 'data_source_profile_id')); db_execute('DELETE FROM data_source_profiles_cf WHERE ' . array_to_sql_or($selected_items, 'data_source_profile_id')); }elseif (get_request_var('drp_action') == '2') { /* duplicate */ for ($i=0;($i'; $profile_array[$i] = $matches[1]; $i++; } } top_header(); form_start('data_source_profiles.php'); html_start_box($profile_actions{get_request_var('drp_action')}, '60%', '', '3', 'center', ''); if (isset($profile_array) && sizeof($profile_array)) { if (get_request_var('drp_action') == '1') { /* delete */ print "

" . __n('Click \'Continue\' to delete the following Data Source Profile', 'Click \'Continue\' to delete following Data Source Profiles', sizeof($profile_array)) . "

\n"; $save_html = " "; }elseif (get_request_var('drp_action') == '2') { /* duplicate */ print "

" . __n('Click \'Continue\' to duplicate the following Data Source Profile. You can optionally change the title format for the new Data Source Profile', 'Click \'Continue\' to duplicate following Data Source Profiles. You can optionally change the title format for the new Data Source Profiles.', sizeof($profile_array)) . "

" . __('Title Format:') . "
"; form_text_box('title_format', ' (1)', '', '255', '30', 'text'); print "

\n"; $save_html = " "; } }else{ print "" . __('You must select at least one Data Source Profile.') . "\n"; $save_html = ""; } print " $save_html \n"; html_end_box(); form_end(); bottom_footer(); } /* -------------------------- CDEF Item Functions -------------------------- */ function profile_item_remove_confirm() { /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('profile_id'); /* ==================================================== */ form_start('data_source_profiles.php'); html_start_box('', '100%', '', '3', 'center', ''); $profile = db_fetch_row('SELECT * FROM data_source_profiles_rra WHERE id=' . get_request_var('id')); ?>


' onClick='$("#cdialog").dialog("close");' name='cancel'> ' name='continue' title=''> __('Each Insert is New Row')); }else{ unset($aggregation_levels[1]); $fields_profile_rra_edit['steps']['array'] = $aggregation_levels; } $fields_profile_rra_edit['steps']['value'] = $rra['steps'] * $sampling_interval; }else{ $oneguy = db_fetch_cell_prepared('SELECT id FROM data_source_profiles_rra WHERE data_source_profile_id = ? AND steps=1', array(get_request_var('profile_id'))); if (empty($oneguy)) { $fields_profile_rra_edit['steps']['array'] = array('1' => __('Each Insert is New Row')); }else{ unset($aggregation_levels[1]); $fields_profile_rra_edit['steps']['array'] = $aggregation_levels; } } form_start('data_source_profiles.php', 'form_rra'); html_start_box( __('RRA [edit: %s]', htmlspecialchars(db_fetch_cell_prepared('SELECT name FROM data_source_profiles_rra WHERE id = ?', array(get_request_var('id')))) ), '100%', '', '3', 'center', ''); draw_edit_form(array( 'config' => array('no_form_tag' => true), 'fields' => inject_form_variables($fields_profile_rra_edit, (isset($rra) ? $rra : array())) ) ); html_end_box(); form_hidden_box('profile_id', get_request_var('profile_id'), ''); html_end_box(); form_save_button('data_source_profiles.php?action=edit&id=' . get_request_var('profile_id')); ?> 0', array(get_request_var('id'))); $header_label = __('Data Source Profile [edit: %s]', htmlspecialchars($profile['name']) . ($readonly ? ' (Read Only)':'')); }else{ $header_label = __('Data Source Profile [new]'); $readonly = false; } form_start('data_source_profiles.php', 'profile'); html_start_box($header_label, '100%', '', '3', 'center', ''); draw_edit_form(array( 'config' => array('no_form_tag' => true), 'fields' => inject_form_variables($fields_profile_edit, (isset($profile) ? $profile : array())) ) ); html_end_box(); if (!isempty_request_var('id')) { if (!$readonly) { html_start_box( __('Data Source Profile RRAs (press save to update timespans)'), '100%', '', '3', 'center', 'data_source_profiles.php?action=item_edit&profile_id=' . $profile['id']); }else{ html_start_box( __('Data Source Profile RRAs (Read Only)'), '100%', '', '3', 'center', ''); } $display_text = array( array('display' => __('Name'), 'align' => 'left'), array('display' => __('Effective Timespan'), 'align' => 'left'), array('display' => __('Steps'), 'align' => 'left'), array('display' => __('Rows'), 'align' => 'left'), ); html_header($display_text, 2); $profile_rras = db_fetch_assoc_prepared('SELECT * FROM data_source_profiles_rra WHERE data_source_profile_id = ? ORDER BY steps', array(get_request_var('id'))); $i = 0; if (sizeof($profile_rras)) { foreach ($profile_rras as $rra) { form_alternate_row('line' . $rra['id']);$i++;?> ":"") . htmlspecialchars($rra['name']) . (!$readonly ? "":"");?> ":"");?> 31536000) { if (floor($duration/31536000) > 0) { $years = floor($duration/31536000); $years = ( $years == 1 ) ? __('1 Year') : __('%d Years', $years); $duration %= 31536000; $output = $years; } } if ($duration > 2592000) { if (floor($duration/2592000)) { $months = floor($duration/2592000); $months = ( $months == 1 ) ? __('1 Month') : __('%d Months', $months); $duration %= 2592000; $output .= (strlen($output) ? ', ':'') . $months; } } if ($duration > 604800) { if (floor($duration/604800) > 0) { $weeks = floor($duration/604800); $weeks = ( $weeks == 1 ) ? __('1 Week') : __('%d Weeks', $weeks); $duration %= 604800; $output .= (strlen($output) ? ', ':'') . $weeks; } } if ($duration > 86400) { if (floor($duration/86400) > 0) { $days = floor($duration/86400); $days = ( $days == 1 ) ? __('1 Day') : __('%d Days', $days); $duration %= 86400; $output .= (strlen($output) ? ', ':'') . $days; } } if (floor($duration/3600) > 0) { $hours = floor($duration/3600); $hours = ( $hours == 1 ) ? __('1 Hour') : __('%d Hours', $hours); $output .= (strlen($output) ? ', ':'') . $hours; } return $output; } function profile() { global $profile_actions, $item_rows, $sampling_intervals, $heartbeats; /* ================= 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_CALLBACK, 'pageset' => true, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'sort_column' => array( 'filter' => FILTER_CALLBACK, 'default' => 'name', 'options' => array('options' => 'sanitize_search_string') ), 'sort_direction' => array( 'filter' => FILTER_CALLBACK, 'default' => 'ASC', 'options' => array('options' => 'sanitize_search_string') ), 'has_data' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array('options' => array('regexp' => '(true|false)')), 'pageset' => true, 'default' => 'true' ) ); validate_store_request_vars($filters, 'sess_dsp'); /* ================= input validation ================= */ if (get_request_var('rows') == '-1') { $rows = read_config_option('num_rows_table'); }else{ $rows = get_request_var('rows'); } html_start_box( __('Data Source Profiles'), '100%', '', '3', 'center', 'data_source_profiles.php?action=edit'); ?>

'> > ' title=''> ' title=''>
'>
0'; }else{ $sql_having = ''; } $total_rows = db_fetch_cell("SELECT COUNT(rows) FROM ( SELECT dsp.id AS rows, SUM(CASE WHEN local_data_id>0 THEN 1 ELSE 0 END) AS data_sources FROM data_source_profiles AS dsp LEFT JOIN data_template_data AS dtd ON dsp.id=dtd.data_source_profile_id $sql_where GROUP BY dsp.id $sql_having ) AS rs"); $profile_list = db_fetch_assoc("SELECT rs.*, SUM(CASE WHEN local_data_id=0 THEN 1 ELSE 0 END) AS templates, SUM(CASE WHEN local_data_id>0 THEN 1 ELSE 0 END) AS data_sources FROM ( SELECT dsp.*, dtd.local_data_id FROM data_source_profiles AS dsp LEFT JOIN data_template_data AS dtd ON dsp.id=dtd.data_source_profile_id GROUP BY dsp.id, dtd.data_template_id, dtd.local_data_id ) AS rs $sql_where GROUP BY rs.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_source_profiles.php?filter=' . get_request_var('filter'), MAX_DISPLAY_PAGES, get_request_var('page'), $rows, $total_rows, 9, __('Profiles'), 'page', 'main'); form_start('data_source_profiles.php', 'chk'); print $nav; html_start_box('', '100%', '', '3', 'center', ''); $display_text = array( 'name' => array('display' => __('Data Source Profile Name'), 'align' => 'left', 'sort' => 'ASC', 'tip' => __('The name of this CDEF.')), 'nosort00' => array('display' => __('Default'), 'align' => 'right', 'tip' => __('Is this the default Profile for all new Data Templates?')), 'nosort01' => array('display' => __('Deletable'), 'align' => 'right', 'tip' => __('Profiles that are in use can not be Deleted. In use is defined as being referenced by a Data Source or a Data Template.')), 'nosort02' => array('display' => __('Read Only'), 'align' => 'right', 'tip' => __('Profiles that are in use by Data Sources become read only for now.')), 'step' => array('display' => __('Poller Interval'), 'align' => 'right', 'sort' => 'ASC', 'tip' => __('The Polling Frequency for the Profile')), 'heartbeat' => array('display' => __('Heartbeat'), 'align' => 'right', 'sort' => 'ASC', 'tip' => __('The Amount of Time, in seocnds, without good data before Data is stored as Unknown')), 'data_sources' => array('display' => __('Data Sources Using'), 'align' => 'right', 'sort' => 'DESC', 'tip' => __('The number of Data Sources using this Profile.')), 'templates' => array('display' => __('Templates Using'), 'align' => 'right', 'sort' => 'DESC', 'tip' => __('The number of Data Templates using this Profile.'))); html_header_sort_checkbox($display_text, get_request_var('sort_column'), get_request_var('sort_direction'), false); $i = 0; if (sizeof($profile_list)) { foreach ($profile_list as $profile) { if ($profile['data_sources'] == 0 && $profile['templates'] == 0) { $disabled = false; }else{ $disabled = true; } if ($profile['data_sources']) { $readonly = true; }else{ $readonly = false; } form_alternate_row('line' . $profile['id'], false, $disabled); form_selectable_cell("" . (strlen(get_request_var('filter')) ? preg_replace('/(' . preg_quote(get_request_var('filter'), '/') . ')/i', "\\1", htmlspecialchars($profile['name'])) : htmlspecialchars($profile['name'])) . '', $profile['id']); form_selectable_cell($profile['default'] == 'on' ? 'Yes':'', $profile['id'], '', 'text-align:right'); form_selectable_cell($disabled ? __('No') : __('Yes'), $profile['id'], '', 'text-align:right'); form_selectable_cell($readonly ? __('Yes') : __('No'), $profile['id'], '', 'text-align:right'); form_selectable_cell($sampling_intervals[$profile['step']], $profile['id'], '', 'text-align:right'); form_selectable_cell($heartbeats[$profile['heartbeat']], $profile['id'], '', 'text-align:right'); form_selectable_cell(number_format_i18n($profile['data_sources']), $profile['id'], '', 'text-align:right'); form_selectable_cell(number_format_i18n($profile['templates']), $profile['id'], '', 'text-align:right'); form_checkbox_cell($profile['name'], $profile['id'], $disabled); form_end_row(); } }else{ print "" . __('No Data Source Profiles') . "\n"; } html_end_box(false); if (sizeof($profile_list)) { print $nav; } /* draw the dropdown containing a list of available actions for this form */ draw_actions_dropdown($profile_actions); form_end(); }