/** * Returns a list of all available devices * * @param array $filter_array specifies fields to filter the database output with * @param string $order_column the database field to sort on * @param string $order_direction whether to sort in ascending or descending order * @param int $limit_start the row number to begin at * @param int $limit_length the number of rows to return * @return array an associative array with one key for each row */ function api_device_list($filter_array = "", $order_column = "description", $order_direction = "asc", $limit_start = 0, $limit_length = 0) { if (!db_column_name_validate($order_column)) return false; if (!db_order_direction_validate($order_direction)) return false; if (!db_integer_validate($limit_start, true)) return false; if (!db_integer_validate($limit_length, true)) return false; $sql_where = ""; if ((is_array($filter_array)) && (sizeof($filter_array) > 0)) { $sql_where = db_filter_array_to_where_string(sql_filter_array_add_types($filter_array, api_device_form_list()), true); } return db_fetch_assoc("select host.id, host.disabled, host.status, host.hostname, host.description, host.min_time, host.max_time, host.cur_time, host.avg_time, host.availability from host $sql_where order by $order_column $order_direction " . ($limit_length > 0 ? "limit $limit_start,$limit_length" : "")); }
function api_data_preset_rra_item_save($data_preset_rra_item_id, $_fields_data_preset_rra_item) { require_once(CACTI_BASE_PATH . "/lib/data_preset/data_preset_rra_info.php"); /* sanity checks */ validate_id_die($data_preset_rra_item_id, "data_preset_rra_item_id", true); /* make sure that there is at least one field to save */ if (sizeof($_fields_data_preset_rra_item) == 0) { return false; } /* sanity check for $preset_rra_id */ if ((empty($data_preset_rra_item_id)) && (empty($_fields_data_preset_rra_item["preset_rra_id"]))) { log_save("Required preset_rra_id when data_preset_rra_item_id = 0", SEV_ERROR); return false; } else if ((isset($_fields_data_preset_rra_item["preset_rra_id"])) && (!db_integer_validate($_fields_data_preset_rra_item["preset_rra_id"]))) { return false; } /* field: id */ $_fields["id"] = array("type" => DB_TYPE_INTEGER, "value" => $data_preset_rra_item_id); /* field: preset_rra_id */ if (!empty($_fields_data_preset_rra_item["preset_rra_id"])) { $_fields["preset_rra_id"] = array("type" => DB_TYPE_INTEGER, "value" => $_fields_data_preset_rra_item["preset_rra_id"]); } /* convert the input array into something that is compatible with db_replace() */ $_fields += sql_get_database_field_array($_fields_data_preset_rra_item, api_data_preset_rra_item_form_list()); if (db_replace("preset_rra_item", $_fields, array("id"))) { if (empty($data_preset_rra_item_id)) { $data_preset_rra_item_id = db_fetch_insert_id(); } return $data_preset_rra_item_id; }else{ return false; } }
function api_graph_tree_item_list($graph_tree_id, $filter_array = "", $limit_sub_tree_id = "", $show_sub_tree_parent = false, $show_sub_tree_children = true, $current_page = 0, $rows_per_page = 0) { /* sanity checks */ validate_id_die($graph_tree_id, "graph_tree_id"); require_once(CACTI_BASE_PATH . "/lib/graph_tree/graph_tree_form.php"); $sql_where = ""; /* validation and setup for the WHERE clause */ if ((is_array($filter_array)) && (sizeof($filter_array) > 0)) { /* validate each field against the known master field list */ $field_errors = api_graph_tree_item_fields_validate(sql_filter_array_to_field_array($filter_array)); /* if a field input error has occured, register the error in the session and return */ if (sizeof($field_errors) > 0) { field_register_error($field_errors); return false; /* otherwise, form an SQL WHERE string using the filter fields */ }else{ $sql_where = sql_filter_array_to_where_string($filter_array, api_graph_tree_item_form_list(), false); } } $sql_limit = ""; /* validation and setup for the LIMIT clause */ if ((is_numeric($current_page)) && (is_numeric($rows_per_page)) && (!empty($current_page)) && (!empty($rows_per_page))) { $sql_limit = "limit " . ($rows_per_page * ($current_page - 1)) . ",$rows_per_page"; } /* only show tree items under this item if specified */ if (db_integer_validate($limit_sub_tree_id, false, false)) { $graph_tree_item = api_graph_tree_item_get($limit_sub_tree_id); $search_key = substr($graph_tree_item["order_key"], 0, (api_graph_tree_item_depth_get($graph_tree_item["order_key"]) * CHARS_PER_TIER)); if ($show_sub_tree_children == true) { $sql_where .= "and graph_tree_items.order_key like '$search_key%%'"; }else{ $sql_where .= " and graph_tree_items.order_key like '$search_key" . str_repeat('_', CHARS_PER_TIER) . str_repeat('0', (MAX_TREE_DEPTH * CHARS_PER_TIER) - (strlen($search_key) + CHARS_PER_TIER)) . "'"; } if ($show_sub_tree_parent == false) { $sql_where .= "and graph_tree_items.id != $limit_sub_tree_id"; } } return db_fetch_assoc("select graph_tree_items.id, graph_tree_items.order_key, graph_tree_items.sort_children_type, graph_tree_items.device_grouping_type, graph_tree_items.item_type, graph_tree_items.item_value, graph.title_cache as graph_title, host.description as host_description, host.hostname as host_hostname from graph_tree_items left join graph on (graph_tree_items.item_value = graph.id and graph_tree_items.item_type = " . TREE_ITEM_TYPE_GRAPH . ") left join host on (graph_tree_items.item_value = host.id and graph_tree_items.item_type = " . TREE_ITEM_TYPE_HOST . ") where graph_tree_items.graph_tree_id = " . sql_sanitize($graph_tree_id) . " $sql_where order by graph_tree_items.order_key $sql_limit"); }
function sql_get_quoted_string($field_type, $field_value) { if ($field_type == DB_TYPE_STRING) { return "'" . sql_sanitize($field_value) . "'"; }else if ($field_type == DB_TYPE_INTEGER){ if (is_numeric($field_value)) { return $field_value; }else{ log_message("Invalid numeric column value '" . $field_value . "' in " . __FUNCTION__ . "()", LOG_LEVEL_WARNING, "lib-db"); die("Invalid numeric column value '" . $field_value . "' in " . __FUNCTION__ . "()"); } }else if ($field_type == DB_TYPE_INTEGER) { if (db_integer_validate($field_value, true, true)) { return $field_value; }else{ log_message("Invalid numeric column value '" . $field_value . "' in " . __FUNCTION__ . "()", LOG_LEVEL_WARNING, "lib-db"); die("Invalid numeric column value '" . $field_value . "' in " . __FUNCTION__ . "()"); } }else if ($field_type == DB_TYPE_NULL) { return "NULL"; }else if ($field_type == DB_TYPE_BLOB) { // i think the addslashes() may cause problems for non-mysql dbs, but it wasn't working for me otherwise return "'" . addslashes($field_value) . "'"; }else if ($field_type == DB_TYPE_HTML_CHECKBOX) { if ($field_value == "on") { return 1; }else if ($field_value == "") { return 0; }else if ($field_value == "0") { return 0; }else if ($field_value == "1") { return 1; }else{ return 0; } }else if ($field_type == DB_TYPE_FUNC_NOW) { return "NOW()"; }else if ($field_type == DB_TYPE_FUNC_MD5) { return "'" . md5($field_value) . "'"; }else{ log_save("Invalid column type '" . $field_type . "' value '" . $field_value . "' in " . __FUNCTION__ . "()", SEV_WARNING); } }
function api_graph_tree_item_save($graph_tree_item_id, &$_fields_graph_tree_item) { require_once(CACTI_BASE_PATH . "/include/graph_tree/graph_tree_constants.php"); require_once(CACTI_BASE_PATH . "/lib/graph_tree/graph_tree_utility.php"); require_once(CACTI_BASE_PATH . "/lib/graph_tree/graph_tree_info.php"); /* sanity checks */ validate_id_die($graph_tree_item_id, "graph_tree_item_id", true); /* sanity check for $graph_tree_id */ if ((empty($graph_tree_item_id)) && (empty($_fields_graph_tree_item["graph_tree_id"]))) { log_save("Required graph_tree_id when graph_tree_item_id = 0", SEV_ERROR); return false; }else if ((isset($_fields_graph_tree_item["graph_tree_id"])) && (!db_integer_validate($_fields_graph_tree_item["graph_tree_id"]))) { return false; } /* sanity check for $item_type */ if ((!isset($_fields_graph_tree_item["item_type"])) || (!db_integer_validate($_fields_graph_tree_item["item_type"]))) { log_save("Missing required item_type", SEV_ERROR); return false; } /* sanity check for $item_value */ if ((empty($graph_tree_item_id)) && (empty($_fields_graph_tree_item["item_value"]))) { log_save("Required item_value when graph_tree_item_id = 0", SEV_ERROR); return false; }else if ((isset($_fields_graph_tree_item["item_value"])) && ( (($_fields_graph_tree_item["item_type"] == TREE_ITEM_TYPE_GRAPH) || ($_fields_graph_tree_item["item_type"] == TREE_ITEM_TYPE_HOST)) && (!db_integer_validate($_fields_graph_tree_item["item_value"])) )) { return false; } /* sanity check for $parent_item_id */ if ((!isset($_fields_graph_tree_item["parent_item_id"])) || (!db_integer_validate($_fields_graph_tree_item["parent_item_id"], true))) { log_save("Missing required parent_item_id", SEV_ERROR); return false; } /* field: id */ $_fields["id"] = array("type" => DB_TYPE_INTEGER, "value" => $graph_tree_item_id); /* field: graph_tree_id */ if (isset($_fields_graph_tree_item["graph_tree_id"])) { $_fields["graph_tree_id"] = array("type" => DB_TYPE_INTEGER, "value" => $_fields_graph_tree_item["graph_tree_id"]); } /* get a copy of the parent tree item id */ if ($_fields_graph_tree_item["parent_item_id"] == "0") { $parent_order_key = ""; $parent_sort_type = TREE_ORDERING_NONE; }else{ $parent_graph_tree_item = api_graph_tree_item_get($_fields_graph_tree_item["parent_item_id"]); $parent_order_key = $parent_graph_tree_item["order_key"]; $parent_sort_type = $parent_graph_tree_item["sort_children_type"]; } /* generate a new order key if this is a new graph tree item */ if (empty($graph_tree_item_id)) { $_fields["order_key"] = array("type" => DB_TYPE_STRING, "value" => api_graph_tree_item_available_order_key_get($_fields_graph_tree_item["graph_tree_id"], $parent_order_key)); }else{ $graph_tree_item = api_graph_tree_item_get($graph_tree_item_id); $_fields["order_key"] = array("type" => DB_TYPE_STRING, "value" => $graph_tree_item["order_key"]); } /* if this item is a graph, make sure it is not being added to the same branch twice */ $search_key = substr($parent_order_key, 0, (api_graph_tree_item_depth_get($parent_order_key) * CHARS_PER_TIER)); if (($_fields_graph_tree_item["item_type"] == TREE_ITEM_TYPE_GRAPH) && (sizeof(db_fetch_assoc("select id from graph_tree_items where item_value = " . $_fields_graph_tree_item["item_value"] . " and item_type = " . TREE_ITEM_TYPE_GRAPH . " and graph_tree_id = " . $_fields_graph_tree_item["graph_tree_id"] . " and order_key like '$search_key" . str_repeat('_', CHARS_PER_TIER) . str_repeat('0', (MAX_TREE_DEPTH * CHARS_PER_TIER) - (strlen($search_key) + CHARS_PER_TIER)) . "'")) > 0)) { return true; } /* convert the input array into something that is compatible with db_replace() */ $_fields += sql_get_database_field_array($_fields_graph_tree_item, api_graph_tree_item_form_list()); /* check for an empty field list */ if (sizeof($_fields) == 1) { return true; } if (db_replace("graph_tree_items", $_fields, array("id"))) { if (empty($graph_tree_item_id)) { $graph_tree_item_id = db_fetch_insert_id(); } /* re-parent the branch if the parent item has changed */ if ($_fields_graph_tree_item["parent_item_id"] != api_graph_tree_item_parent_get_bykey($_fields["order_key"]["value"], $_fields_graph_tree_item["graph_tree_id"])) { api_graph_tree_item_reparent($graph_tree_item_id, $_fields_graph_tree_item["parent_item_id"]); } $parent_tree = api_graph_tree_get($_fields_graph_tree_item["graph_tree_id"]); /* tree item ordering */ if ($parent_tree["sort_type"] == TREE_ORDERING_NONE) { /* resort our parent */ if ($parent_sort_type != TREE_ORDERING_NONE) { echo $parent_sort_type; api_graph_tree_item_sort(SORT_TYPE_TREE_ITEM, $_fields_graph_tree_item["parent_item_id"], $parent_sort_type); } /* if this is a header, sort direct children */ if (($_fields_graph_tree_item["item_type"] == TREE_ITEM_TYPE_HEADER) && ($parent_sort_type != TREE_ORDERING_NONE)) { api_graph_tree_item_sort(SORT_TYPE_TREE_ITEM, $graph_tree_item_id, $parent_sort_type); } /* tree ordering */ }else{ /* potential speed savings for large trees */ if (api_graph_tree_item_depth_get($_fields["order_key"]["value"]) == 1) { api_graph_tree_item_sort(SORT_TYPE_TREE, $_fields_graph_tree_item["graph_tree_id"], $parent_tree["sort_type"]); }else{ api_graph_tree_item_sort(SORT_TYPE_TREE_ITEM, $_fields_graph_tree_item["parent_item_id"], $parent_tree["sort_type"]); } } /* if the user checked the 'Propagate Changes' box */ if (($_fields_graph_tree_item["item_type"] == TREE_ITEM_TYPE_HEADER) && (isset($_fields_graph_tree_item["sort_children_type"])) && (!empty($_fields_graph_tree_item["propagate_changes"]))) { $graph_tree_items = api_graph_tree_item_list($_fields_graph_tree_item["graph_tree_id"], array("item_type" => TREE_ITEM_TYPE_HEADER), $graph_tree_item_id, false, false); if (is_array($graph_tree_items) > 0) { foreach ($graph_tree_items as $graph_tree_item) { db_update("graph_tree_items", array( "id" => array("type" => DB_TYPE_INTEGER, "value" => $graph_tree_item["id"]), "sort_children_type" => array("type" => DB_TYPE_INTEGER, "value" => $_fields_graph_tree_item["sort_children_type"]) ), array("id")); if ($_fields_graph_tree_item["sort_children_type"] != TREE_ORDERING_NONE) { api_graph_tree_item_sort(SORT_TYPE_TREE_ITEM, $graph_tree_item["id"], $_fields_graph_tree_item["sort_children_type"]); } } } } return $graph_tree_item_id; }else{ return false; } }
function validate_id_die($argument_value, $argument_name, $allow_empty = false) { if (!db_integer_validate($argument_value, $allow_empty)) { die("Invalid input '$argument_value' for '$argument_name' in " . log_last_function_get() . "()"); } }
function &package_dependencies_list($type, $id, $dep_array) { require_once(CACTI_BASE_PATH . "/lib/graph_template/graph_template_info.php"); require_once(CACTI_BASE_PATH . "/lib/data_template/data_template_info.php"); /* make sure we define our variables */ if (sizeof($dep_array) == 0) { $dep_array["graph_template"] = array(); $dep_array["data_template"] = array(); $dep_array["script"] = array(); $dep_array["data_query"] = array(); } switch ($type) { case 'package': /* dependency: graph template */ $graph_templates = api_package_graph_template_list($id); if (sizeof($graph_templates) > 0) { foreach ($graph_templates as $graph_template) { if (!in_array($graph_template["id"], $dep_array["graph_template"])) { $dep_array["graph_template"][] = $graph_template["id"]; $dep_array = package_dependencies_list("graph_template", $graph_template["id"], $dep_array); } } } break; case 'graph_template': /* dependency: data template */ $data_templates = api_graph_template_data_template_list($id); if (sizeof($data_templates) > 0) { foreach ($data_templates as $data_template) { if (!in_array($data_template["id"], $dep_array["data_template"])) { $dep_array["data_template"][] = $data_template["id"]; $dep_array = package_dependencies_list("data_template", $data_template["id"], $dep_array); } } } break; case 'data_template': /* dependency: script */ $script_id = api_data_template_input_field_value_get($id, "script_id"); if (($script_id != false) && (db_integer_validate($script_id)) && (!in_array($script_id, $dep_array["script"]))) { $dep_array["script"][] = $script_id; } /* dependency: data query */ $data_query_id = api_data_template_input_field_value_get($id, "data_query_id"); if (($data_query_id !== false) && (db_integer_validate($data_query_id)) && (!in_array($data_query_id, $dep_array["data_query"]))) { $dep_array["data_query"][] = $data_query_id; } break; } return $dep_array; }