0)
left join settings_tree on (graph_tree_items.id=settings_tree.graph_tree_item_id and settings_tree.user_id=$user_id)
left join host on graph_tree_items.host_id=host.id
$sql_join
where graph_tree_items.graph_tree_id=$tree_id
and graph_tree_items.order_key like '$search_key%'
$sql_where
order by graph_tree_items.order_key");
print "\n";
html_graph_start_box(0, true);
print "
[root] - " . db_fetch_cell("select name from graph_tree where id=" . $_SESSION["sess_view_tree_id"]) . "
";
$i = 0;
/* loop through each tree item */
if (sizeof($heirarchy) > 0) {
foreach ($heirarchy as $leaf) {
/* find out how 'deep' this item is */
$tier = tree_tier($leaf["order_key"]);
/* find the type of the current branch */
if ($leaf["title"] != "") { $current_leaf_type = "heading"; }elseif (!empty($leaf["local_graph_id"])) { $current_leaf_type = "graph"; }else{ $current_leaf_type = "host"; }
/* find the type of the next branch. make sure the next item exists first */
if (isset($heirarchy{$i+1})) {
if ($heirarchy{$i+1}["title"] != "") { $next_leaf_type = "heading"; }elseif (!empty($heirarchy{$i+1}["local_graph_id"])) { $next_leaf_type = "graph"; }else{ $next_leaf_type = "host"; }
}else{
$next_leaf_type = "";
}
if ((($current_leaf_type == 'heading') || ($current_leaf_type == 'host')) && (($tier <= $hide_until_tier) || ($hide_until_tier == false))) {
$current_title = (($current_leaf_type == "heading") ? $leaf["title"] : $leaf["hostname"]);
/* draw heading */
draw_tree_header_row($tree_id, $leaf["id"], $tier, $current_title, true, $leaf["status"], true);
/* this is an open host, lets expand a bit */
if (($current_leaf_type == "host") && (empty($leaf["status"]))) {
/* get a list of all graph templates in use by this host */
$graph_templates = db_fetch_assoc("select
graph_templates.id,
graph_templates.name
from graph_local,graph_templates,graph_templates_graph
where graph_local.id=graph_templates_graph.local_graph_id
and graph_templates_graph.graph_template_id=graph_templates.id
and graph_local.host_id=" . $leaf["host_id"] . "
group by graph_templates.id
order by graph_templates.name");
if (sizeof($graph_templates) > 0) {
foreach ($graph_templates as $graph_template) {
draw_tree_header_row($tree_id, $leaf["id"], ($tier+1), $graph_template["name"], false, $leaf["status"], false);
/* get a list of each graph using this graph template for this particular host */
$graphs = db_fetch_assoc("select
graph_templates_graph.title_cache,
graph_templates_graph.local_graph_id
from graph_local,graph_templates,graph_templates_graph
where graph_local.id=graph_templates_graph.local_graph_id
and graph_templates_graph.graph_template_id=graph_templates.id
and graph_local.graph_template_id=" . $graph_template["id"] . "
and graph_local.host_id=" . $leaf["host_id"] . "
order by graph_templates_graph.title_cache");
$graph_ct = 0;
if (sizeof($graphs) > 0) {
foreach ($graphs as $graph) {
/* incriment graph counter so we know when to start a new row or not */
$graph_ct++;
if (!isset($graphs[$graph_ct])) { $next_leaf_type = "heading"; }else{ $next_leaf_type = "graph"; }
/* draw graph */
$already_open = draw_tree_graph_row($already_open, $graph_ct, $next_leaf_type, ($tier+2), $graph["local_graph_id"], 1, $graph["title_cache"]);
}
}
}
}
}
$graph_ct = 0;
}elseif (($current_leaf_type == 'graph') && (($tier <= $hide_until_tier) || ($hide_until_tier == false))) {
/* incriment graph counter so we know when to start a new row or not */
$graph_ct++;
/* draw graph */
$already_open = draw_tree_graph_row($already_open, $graph_ct, $next_leaf_type, $tier, $leaf["local_graph_id"], $leaf["rra_id"], $leaf["graph_title"]);
}
/* if we have come back to the tier that was origionally flagged, then take away the flag */
if (($tier <= $hide_until_tier) && ($hide_until_tier != false)) {
$hide_until_tier = false;
}
/* if we are supposed to hide this branch, flag it */
if (($leaf["status"] == "1") && ($hide_until_tier == false)) {
$hide_until_tier = $tier;
}
$i++;
}
}
print "";
html_graph_end_box();
}
function grow_edit_graph_tree($tree_id, $user_id, $options) {
global $config, $colors;
include_once($config["library_path"] . "/tree.php");
$tree_sorting_type = db_fetch_cell("select sort_type from graph_tree where id='$tree_id'");
$tree = db_fetch_assoc("select
graph_tree_items.id,
graph_tree_items.title,
graph_tree_items.local_graph_id,
graph_tree_items.host_id,
graph_tree_items.order_key,
graph_tree_items.sort_children_type,
graph_templates_graph.title_cache as graph_title,
CONCAT_WS('',description,' (',hostname,')') as hostname
from graph_tree_items
left join graph_templates_graph on (graph_tree_items.local_graph_id=graph_templates_graph.local_graph_id and graph_tree_items.local_graph_id>0)
left join host on host.id=graph_tree_items.host_id
where graph_tree_items.graph_tree_id=$tree_id
order by graph_tree_items.order_key");
print "\n";
## Here we go. Starting the main tree drawing loop.
$i = 0;
if (sizeof($tree) > 0) {
foreach ($tree as $leaf) {
$tier = tree_tier($leaf["order_key"]);
$transparent_indent = " ";
$sort_cache[$tier] = $leaf["sort_children_type"];
if ($i % 2 == 0) { $row_color = $colors["form_alternate1"]; }else{ $row_color = $colors["form_alternate2"]; } $i++;
if ($leaf["local_graph_id"] > 0) {
print "
");
}
}
}
/* data query index grouping */
}elseif ($leaf["host_grouping_type"] == HOST_GROUPING_DATA_QUERY_INDEX) {
$data_queries = db_fetch_assoc("select
snmp_query.id,
snmp_query.name
from graph_local,snmp_query
where graph_local.snmp_query_id=snmp_query.id
and graph_local.host_id=" . $leaf["host_id"] . "
" . (!isset($data_query_id) ? "" : "and snmp_query.id=$data_query_id") . "
group by snmp_query.id
order by snmp_query.name");
/* for graphs without a data query */
if (empty($data_query_id)) {
array_push($data_queries, array(
"id" => "0",
"name" => "(Non Indexed)"
));
}
if (sizeof($data_queries) > 0) {
foreach ($data_queries as $data_query) {
/* fetch a list of field names that are sorted by the preferred sort field */
$sort_field_data = get_formatted_data_query_indexes($leaf["host_id"], $data_query["id"]);
/* grab a list of all graphs for this host/data query combination */
$graphs = db_fetch_assoc("select
graph_templates_graph.title_cache,
graph_templates_graph.local_graph_id,
graph_local.snmp_index
from graph_local,graph_templates_graph
$sql_join
where graph_local.id=graph_templates_graph.local_graph_id
and graph_local.snmp_query_id=" . $data_query["id"] . "
and graph_local.host_id=" . $leaf["host_id"] . "
" . (empty($data_query_index) ? "" : "and graph_local.snmp_index='$data_query_index'") . "
$sql_where
group by graph_templates_graph.local_graph_id
order by graph_templates_graph.title_cache");
/* re-key the results on data query index */
if (sizeof($graphs) > 0) {
print "
Data Query: " . $data_query["name"] . "
";
foreach ($graphs as $graph) {
$snmp_index_to_graph{$graph["snmp_index"]}{$graph["local_graph_id"]} = $graph["title_cache"];
}
}
/* using the sorted data as they key; grab each snmp index from the master list */
while (list($snmp_index, $sort_field_value) = each($sort_field_data)) {
/* render each graph for the current data query index */
if (isset($snmp_index_to_graph[$snmp_index])) {
$graph_list = array();
while (list($local_graph_id, $graph_title) = each($snmp_index_to_graph[$snmp_index])) {
/* reformat the array so it's compatable with the html_graph* area functions */
array_push($graph_list, array("local_graph_id" => $local_graph_id, "title_cache" => $graph_title));
}
if (read_graph_config_option("thumbnail_section_tree_2") == "on") {
html_graph_thumbnail_area($graph_list, "", "view_type=tree&graph_start=" . get_current_graph_start() . "&graph_end=" . get_current_graph_end(), "
\n";
}
/* end the nested table for the heading */
print "
\n";
}
function draw_tree_graph_row($already_open, $graph_counter, $next_leaf_type, $current_tier, $local_graph_id, $rra_id, $graph_title) {
global $colors;
/* start the nested table for the graph group */
if ($already_open == false) {
print "
\n";
/* draw one vbar for each tier */
for ($j=0;($j<($current_tier-1));$j++) {
print "
\n";
}
print "
\n";
$already_open = true;
}
/* print out the actual graph html */
if (read_graph_config_option("thumbnail_section_tree_1") == "on") {
print "
\n";
/* if we are at the end of a row, start a new one */
if ($graph_counter % read_graph_config_option("num_columns") == 0) {
print "
\n";
}
}else{
print "
";
print "
\n";
}
/* if we are at the end of the graph group, end the nested table */
if ($next_leaf_type != "graph") {
print "
";
print "
\n";
$already_open = false;
}
return $already_open;
}
function draw_tree_dropdown($current_tree_id) {
global $colors;
$html = "";
$tree_list = get_graph_tree_array();
if (isset($_GET["tree_id"])) {
$_SESSION["sess_view_tree_id"] = $current_tree_id;
}
/* if there is a current tree, make sure it still exists before going on */
if ((!empty($_SESSION["sess_view_tree_id"])) && (db_fetch_cell("select id from graph_tree where id=" . $_SESSION["sess_view_tree_id"]) == "")) {
$_SESSION["sess_view_tree_id"] = 0;
}
/* set a default tree if none is already selected */
if (empty($_SESSION["sess_view_tree_id"])) {
if (db_fetch_cell("select id from graph_tree where id=" . read_graph_config_option("default_tree_id")) > 0) {
$_SESSION["sess_view_tree_id"] = read_graph_config_option("default_tree_id");
}else{
if (sizeof($tree_list) > 0) {
$_SESSION["sess_view_tree_id"] = $tree_list[0]["id"];
}
}
}
/* make the dropdown list of trees */
if (sizeof($tree_list) > 1) {
$html ="\n";
}elseif (sizeof($tree_list) == 1) {
/* there is only one tree; use it */
//print "