'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); } /* flush the headers now */ ob_end_clean(); session_write_close(); $graph_data_array = array(); /* override: graph start time (unix time) */ if (!isempty_request_var('graph_start') && get_request_var('graph_start') < 1600000000) { $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') < 1600000000) { $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'); } $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; $output = @rrdtool_function_graph(get_request_var('local_graph_id'), (array_key_exists('rra_id', $_REQUEST) ? get_request_var('rra_id') : null), $graph_data_array); $oarray = array('type' => $gtype, 'local_graph_id' => get_request_var('local_graph_id'), 'rra_id' => get_request_var('rra_id')); // Check if we received back something populated from rrdtool if ($output) { // 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 { // We most likely got back an empty image since the graph data doesn't exist yet, show a placeholder $oarray['image'] = base64_encode(file_get_contents(__DIR__."/images/rrd_not_found.png")); } print json_encode($oarray);