'sanitize_search_string')); /* ==================================================== */ } else { set_request_var('graph_width', 700); set_request_var('graph_height', 200); set_request_var('title_font_size', 10); set_request_var('view_type', 'tree'); set_request_var('graph_start', -1600); set_request_var('graph_end', 0); set_request_var('local_graph_id', 53); set_request_var('rra_id', 0); } cacti_session_close(); $graph_data_array = array(); /* override: graph start time (unix time) */ if (!isempty_request_var('graph_start') && get_request_var('graph_start') < FILTER_VALIDATE_MAX_DATE_AS_INT) { $graph_data_array['graph_start'] = get_request_var('graph_start'); } /* override: graph end time (unix time) */ if (!isempty_request_var('graph_end') && get_request_var('graph_end') < FILTER_VALIDATE_MAX_DATE_AS_INT) { $graph_data_array['graph_end'] = get_request_var('graph_end'); } /* override: graph height (in pixels) */ if (!isempty_request_var('graph_height') && get_request_var('graph_height') < 3000) { $graph_data_array['graph_height'] = get_request_var('graph_height'); } /* override: graph width (in pixels) */ if (!isempty_request_var('graph_width') && get_request_var('graph_width') < 3000) { $graph_data_array['graph_width'] = get_request_var('graph_width'); } /* override: skip drawing the legend? */ if (!isempty_request_var('graph_nolegend')) { $graph_data_array['graph_nolegend'] = get_request_var('graph_nolegend'); } /* print RRDtool graph source? */ if (!isempty_request_var('show_source')) { $graph_data_array['print_source'] = get_request_var('show_source'); } /* disable cache check */ if (isset_request_var('disable_cache')) { $graph_data_array['disable_cache'] = true; } /* set the theme */ if (isset_request_var('graph_theme')) { $graph_data_array['graph_theme'] = get_request_var('graph_theme'); } if (isset_request_var('rra_id')) { if (get_nfilter_request_var('rra_id') == 'all') { $rra_id = 'all'; } else { $rra_id = get_filter_request_var('rra_id'); } } else { $rra_id = null; } $graph_data_array['graphv'] = true; // Determine the graph type of the output if (!isset_request_var('image_format')) { $type = db_fetch_cell_prepared('SELECT image_format_id FROM graph_templates_graph WHERE local_graph_id = ?', array(get_request_var('local_graph_id'))); switch($type) { case '1': $gtype = 'png'; break; case '3': $gtype = 'svg+xml'; break; default: $gtype = 'png'; break; } } else { switch(strtolower(get_nfilter_request_var('image_format'))) { case 'png': $graph_data_array['image_format'] = 'png'; break; case 'svg': $gtype = 'svg+xml'; break; default: $gtype = 'png'; break; } } $graph_data_array['image_format'] = $gtype; if ($config['poller_id'] == 1 || read_config_option('storage_location')) { $xport_meta = array(); $output = rrdtool_function_graph(get_request_var('local_graph_id'), $rra_id, $graph_data_array, '', $xport_meta, $_SESSION['sess_user_id']); ob_end_clean(); } else { if (isset_request_var('rra_id')) { if (get_nfilter_request_var('rra_id') == 'all') { $rra_id = 'all'; } else { $rra_id = get_filter_request_var('rra_id'); } } /* get the theme */ if (!isset_request_var('graph_theme')) { $graph_data_array['graph_theme'] = get_selected_theme(); } if (isset($_SESSION['sess_user_id'])) { $graph_data_array['effective_user'] = $_SESSION['sess_user_id']; } $hostname = db_fetch_cell('SELECT hostname FROM poller WHERE id = 1'); $url = get_url_type() . '://' . $hostname . $config['url_path'] . 'remote_agent.php?action=graph_json'; $url .= '&local_graph_id=' . get_request_var('local_graph_id'); $url .= '&rra_id=' . $rra_id; foreach($graph_data_array as $variable => $value) { $url .= '&' . $variable . '=' . $value; } $fgc_contextoption = get_default_contextoption(); $fgc_context = stream_context_create($fgc_contextoption); $output = @file_get_contents($url, false, $fgc_context); } $output = trim($output); $oarray = array('type' => $gtype, 'local_graph_id' => get_request_var('local_graph_id'), 'rra_id' => $rra_id); // Check if we received back something populated from rrdtool if ($output !== false && $output != '' && strpos($output, 'image = ') !== false) { // Find the beginning of the image definition row $image_begin_pos = strpos($output, 'image = '); // Find the end of the line of the image definition row, after this the raw image data will come $image_data_pos = strpos($output, "\n" , $image_begin_pos) + 1; // Insert the raw image data to the array $oarray['image'] = base64_encode(substr($output, $image_data_pos)); // Parse and populate everything before the image definition row $header_lines = explode("\n", substr($output, 0, $image_begin_pos - 1)); foreach ($header_lines as $line) { $parts = explode(' = ', $line); $oarray[$parts[0]] = trim($parts[1]); } } else { /* image type now png */ $oarray['type'] = 'png'; ob_start(); $graph_data_array['get_error'] = true; $null_param = array(); rrdtool_function_graph(get_request_var('local_graph_id'), $rra_id, $graph_data_array, '', $null_param, $_SESSION['sess_user_id']); $error = ob_get_contents(); ob_end_clean(); if (read_config_option('stats_poller') == '') { $error = __('The Cacti Poller has not run yet.'); } if (isset($graph_data_array['graph_width']) && isset($graph_data_array['graph_height'])) { $image = rrdtool_create_error_image($error, $graph_data_array['graph_width'], $graph_data_array['graph_height']); } else { $image = rrdtool_create_error_image($error); } if (isset($graph_data_array['graph_width'])) { if (isset($graph_data_array['graph_nolegend'])) { $oarray['image_width'] = round($graph_data_array['graph_width'] * 1.24, 0); $oarray['image_height'] = round($graph_data_array['graph_height'] * 1.45, 0); } else { $oarray['image_width'] = round($graph_data_array['graph_width'] * 1.15, 0); $oarray['image_height'] = round($graph_data_array['graph_height'] * 1.8, 0); } } else { $oarray['image_width'] = round(db_fetch_cell_prepared('SELECT width FROM graph_templates_graph WHERE local_graph_id = ?', array(get_request_var('local_graph_id'))), 0); $oarray['image_height'] = round(db_fetch_cell_prepared('SELECT height FROM graph_templates_graph WHERE local_graph_id = ?', array(get_request_var('local_graph_id'))), 0); } if ($image !== false) { $oarray['image'] = base64_encode($image); } else { $oarray['image'] = base64_encode(file_get_contents(__DIR__ . '/images/cacti_error_image.png')); } } header('Content-Type: application/json'); header('Cache-Control: max-age=15'); $json = json_encode($oarray); header('Content-Length: ' . strlen($json)); print $json;