'sanitize_search_string')); /* ==================================================== */ api_plugin_hook_function('graph_image'); $graph_data_array = array(); // 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; } } else { switch(strtolower(get_nfilter_request_var('image_format'))) { case 'png': $gtype = 'png'; break; case 'svg': $gtype = 'svg+xml'; break; default: $gtype = 'png'; break; } } $graph_data_array['image_format'] = $gtype; cacti_session_close(); /* 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; } if ($config['poller_id'] == 1 || read_config_option('storage_location')) { $null_param = array(); $output = rrdtool_function_graph(get_request_var('local_graph_id'), $rra_id, $graph_data_array, '', $null_param, $_SESSION['sess_user_id']); } else { $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); if (is_array($output) && isset($output['image'])) { $output = $output['image']; } // 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 $output = substr($output, $image_data_pos); } if ($output !== false && $output != '') { /* flush the headers now */ ob_end_clean(); header('Content-type: image/'. $gtype); header('Cache-Control: max-age=15'); print $output; } else { ob_start(); /* get the error string */ $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(); 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); } ob_end_clean(); header('Content-type: image/png'); header('Cache-Control: max-age=15'); if ($image !== false) { print $image; } else { print file_get_contents(__DIR__ . '/images/cacti_error_image.png'); } }