function export() { global $config; /* count how many graphs are created */ $total_graphs_created = 0; if (!file_exists(read_config_option("path_html_export"))) { export_fatal("Export path '" . read_config_option("path_html_export") . "' does not exist! Export can not continue."); } export_log("Running graph export"); $cacti_root_path = $config["base_path"]; $cacti_export_path = read_config_option("path_html_export"); if (substr_count($cacti_root_path, $cacti_export_path) || (substr_count($cacti_export_path, $cacti_root_path))) { export_fatal("Export path '" . read_config_option("path_html_export") . "' is to closely related to the Cacti web root. You must be out of your mind."); } /* delete all files and directories in the cacti_export_path */ del_directory($cacti_export_path, false); /* test how will the export will be made */ if (read_config_option('export_presentation') == 'tree') { export_log("Running graph export with tree organization"); $total_graphs_created = tree_export(); }else { /* copy the css/images on the first time */ if (file_exists("$cacti_export_path/main.css") == false) { copy("$cacti_root_path/include/main.css", "$cacti_export_path/main.css"); copy("$cacti_root_path/images/tab_cacti.gif", "$cacti_export_path/tab_cacti.gif"); copy("$cacti_root_path/images/cacti_backdrop.gif", "$cacti_export_path/cacti_backdrop.gif"); copy("$cacti_root_path/images/transparent_line.gif", "$cacti_export_path/transparent_line.gif"); copy("$cacti_root_path/images/shadow.gif", "$cacti_export_path/shadow.gif"); } /* if the index file already exists, delete it */ check_remove($cacti_export_path . "/index.html"); /* open pointer to the new index file */ $fp_index = fopen($cacti_export_path . "/index.html", "w"); /* get a list of all graphs that need exported */ $graphs = db_fetch_assoc("select graph_templates_graph.id, graph_templates_graph.local_graph_id, graph_templates_graph.height, graph_templates_graph.width, graph_templates_graph.title_cache, graph_templates.name, graph_local.host_id from graph_templates_graph left join graph_templates on (graph_templates_graph.graph_template_id=graph_templates.id) left join graph_local on (graph_templates_graph.local_graph_id=graph_local.id) where graph_templates_graph.local_graph_id!=0 and graph_templates_graph.export='on' order by graph_templates_graph.title_cache"); $rras = db_fetch_assoc("select rra.id, rra.name from rra order by steps"); /* write the html header data to the index file */ fwrite($fp_index, HTML_HEADER); fwrite($fp_index, HTML_GRAPH_HEADER_ONE); fwrite($fp_index, "<strong>Displaying " . sizeof($graphs) . " Exported Graph" . ((sizeof($graphs) > 1) ? "s" : "") . "</strong>"); fwrite($fp_index, HTML_GRAPH_HEADER_TWO); /* open a pipe to rrdtool for writing */ $rrdtool_pipe = rrd_init(); /* for each graph... */ $i = 0; $k = 0; if ((sizeof($graphs) > 0) && (sizeof($rras) > 0)) { foreach ($graphs as $graph) { check_remove($cacti_export_path . "/thumb_" . $graph["local_graph_id"] . ".png"); check_remove($cacti_export_path . "/graph_" . $graph["local_graph_id"] . ".html"); /* settings for preview graphs */ $graph_data_array["graph_height"] = "100"; $graph_data_array["graph_width"] = "300"; $graph_data_array["graph_nolegend"] = true; $graph_data_array["export"] = true; $graph_data_array["export_filename"] = "thumb_" . $graph["local_graph_id"] . ".png"; rrdtool_function_graph($graph["local_graph_id"], 0, $graph_data_array, $rrdtool_pipe); $total_graphs_created++; /* generate html files for each graph */ $fp_graph_index = fopen($cacti_export_path . "/graph_" . $graph["local_graph_id"] . ".html", "w"); fwrite($fp_graph_index, HTML_HEADER); fwrite($fp_graph_index, HTML_GRAPH_HEADER_ONE); fwrite($fp_graph_index, "<strong>Graph - " . $graph["title_cache"] . "</strong>"); fwrite($fp_graph_index, HTML_GRAPH_HEADER_TWO); fwrite($fp_graph_index, "<td>"); /* reset vars for actual graph image creation */ reset($rras); unset($graph_data_array); /* generate graphs for each rra */ foreach ($rras as $rra) { $graph_data_array["export"] = true; $graph_data_array["export_filename"] = "graph_" . $graph["local_graph_id"] . "_" . $rra["id"] . ".png"; rrdtool_function_graph($graph["local_graph_id"], $rra["id"], $graph_data_array, $rrdtool_pipe); $total_graphs_created++; /* write image related html */ fwrite($fp_graph_index, "<div align=center><img src='graph_" . $graph["local_graph_id"] . "_" . $rra["id"] . ".png' border=0></div>\n <div align=center><strong>" . $rra["name"] . "</strong></div><br>"); } fwrite($fp_graph_index, "</td>"); fwrite($fp_graph_index, HTML_GRAPH_FOOTER); fwrite($fp_graph_index, HTML_FOOTER); fclose($fp_graph_index); /* main graph page html */ fwrite($fp_index, "<td align='center' width='" . (98 / 2) . "%'><a href='graph_" . $graph["local_graph_id"] . ".html'><img src='thumb_" . $graph["local_graph_id"] . ".png' border='0' alt='" . $graph["title_cache"] . "'></a></td>\n"); $i++; $k++; if (($i == 2) && ($k < count($graphs))) { $i = 0; fwrite($fp_index, "</tr><tr>"); } } }else{ fwrite($fp_index, "<td><em>No Graphs Found.</em></td>"); } /* close the rrdtool pipe */ rrd_close($rrdtool_pipe); fwrite($fp_index, HTML_GRAPH_FOOTER); fwrite($fp_index, HTML_FOOTER); fclose($fp_index); } return $total_graphs_created; }
function export() { global $config; /* count how many graphs are created */ $total_graphs_created = 0; $cacti_root_path = $config["base_path"]; $cacti_export_path = read_config_option("path_html_export"); /* if the path is not a directory, don't continue */ if (!is_dir($cacti_export_path)) { export_fatal("Export path '" . $cacti_export_path . "' does not exist! Export can not continue."); } /* blank paths are not good */ if (strlen($cacti_export_path) == 0) { export_fatal("Export path is null! Export can not continue."); } /* can not be the web root */ if (strcasecmp($cacti_root_path, $cacti_export_path) == 0 && read_config_option("export_type") == "local") { export_fatal("Export path '" . $cacti_export_path . "' is the Cacti web root. Can not continue."); } /* can not be a parent of the Cacti web root */ if (strncasecmp($cacti_root_path, $cacti_export_path, strlen($cacti_export_path)) == 0) { export_fatal("Export path '" . $cacti_export_path . "' is a parent folder from the Cacti web root. Can not continue."); } /* check for bad directories within the cacti path */ if (strcasecmp($cacti_root_path, $cacti_export_path) < 0) { $cacti_system_paths = array("include", "lib", "install", "rra", "log", "scripts", "plugins", "images", "resource"); foreach ($cacti_system_paths as $cacti_system_path) { if (substr_count(strtolower($cacti_export_path), strtolower($cacti_system_path)) > 0) { export_fatal("Export path '" . $cacti_export_path . "' is potentially within a Cacti system path '" . $cacti_system_path . "'. Can not continue."); } } } /* don't allow to export to system paths */ $system_paths = array("/boot", "/lib", "/usr", "/usr/bin", "/bin", "/sbin", "/usr/sbin", "/usr/lib", "/var/lib", "/root", "/etc", "windows", "winnt", "program files"); foreach ($system_paths as $system_path) { if (substr($system_path, 0, 1) == "/") { if ($system_path == substr($cacti_export_path, 0, strlen($system_path))) { export_fatal("Export path '" . $cacti_export_path . "' is within a system path '" . $system_path . "'. Can not continue."); } } elseif (substr_count(strtolower($cacti_export_path), strtolower($system_path)) > 0) { export_fatal("Export path '" . $cacti_export_path . "' is within a system path '" . $system_path . "'. Can not continue."); } } export_log("Running graph export"); /* delete all files and directories in the cacti_export_path */ del_directory($cacti_export_path, false); /* test how will the export will be made */ if (read_config_option('export_presentation') == 'tree') { export_log("Running graph export with tree organization"); $total_graphs_created = tree_export(); } else { export_log("Running graph export with legacy organization"); $total_graphs_created = classical_export($cacti_root_path, $cacti_export_path); } return $total_graphs_created; }