/** * execute an SNMP query for a given device * @param int $device_id * @param int $snmp_query_id */ function query_snmp_device($device_id, $snmp_query_id) { global $config; include_once(CACTI_BASE_PATH . "/lib/snmp.php"); $device = db_fetch_row("SELECT hostname, snmp_community, snmp_version, snmp_username, snmp_password, snmp_auth_protocol, snmp_priv_passphrase, snmp_priv_protocol, snmp_context, snmp_port, snmp_timeout, ping_retries, max_oids FROM device WHERE id='$device_id'"); $snmp_queries = get_data_query_array($snmp_query_id); if ($device["hostname"] == "") { debug_log_insert("data_query", __("Invalid device_id:") . " $device_id"); return false; } /* invalid xml check */ if ((!is_array($snmp_queries)) || (sizeof($snmp_queries) == 0)) { debug_log_insert("data_query", __("Error parsing XML file into an array.")); return false; } debug_log_insert("data_query", __("XML file parsed ok.")); /* fetch specified index at specified OID */ $snmp_indexes = cacti_snmp_walk($device["hostname"], $device["snmp_community"], $snmp_queries["oid_index"], $device["snmp_version"], $device["snmp_username"], $device["snmp_password"], $device["snmp_auth_protocol"], $device["snmp_priv_passphrase"], $device["snmp_priv_protocol"], $device["snmp_context"], $device["snmp_port"], $device["snmp_timeout"], $device["ping_retries"], $device["max_oids"], SNMP_WEBUI); debug_log_insert("data_query", __("Executing SNMP walk for list of indexes @ '%s'", $snmp_queries["oid_index"])); /* no data found; get out */ if (!$snmp_indexes) { debug_log_insert("data_query", __("No SNMP data returned")); return false; } else { /* show list of indices found */ for ($i=0; $i<sizeof($snmp_indexes); $i++) { debug_log_insert("data_query", __("Index found at OID: '%s' value: '%s'", $snmp_indexes[$i]["oid"], $snmp_indexes[$i]["value"])); } } /* the last octet of the oid is the index by default */ $index_parse_regexp = '/.*\.([0-9]+)$/'; /* parse the index if required */ if (isset($snmp_queries["oid_index_parse"])) { $index_parse_regexp = str_replace("OID/REGEXP:", "", $snmp_queries["oid_index_parse"]); for ($i=0; $i<sizeof($snmp_indexes); $i++) { $snmp_indexes[$i]["value"] = preg_replace($index_parse_regexp, "\\1", $snmp_indexes[$i]["oid"]); debug_log_insert("data_query", __("index_parse at OID: '%s' results: '%s'", $snmp_indexes[$i]["oid"], $snmp_indexes[$i]["value"])); } } /* set an array to host all updates */ $output_array = array(); $fields_processed = array(); rewrite_snmp_enum_value(NULL); while (list($field_name, $field_array) = each($snmp_queries["fields"])) { if ($field_array["direction"] == "input" && $field_array["method"] != "get" && (isset($field_array["rewrite_index"]) || isset($field_array["oid_suffix"]) )){ #$field_array["method"] = "get"; # do NOT change method, only create error message debug_log_insert("data_query", __("FIXME: wrong 'method' defined for '%s' while using 'rewrite_index' or 'oid_suffix'. Please change XML to use 'get' instead.", $field_name)); } $values = array(); if ((!isset($field_array["oid"])) && ($field_array["source"] == "index")) { for ($i=0; $i<sizeof($snmp_indexes); $i++) { debug_log_insert("data_query", __("Inserting index data for field '%s' [value='%s']", $field_name, $snmp_indexes[$i]["value"])); $values[] = array( "value" => $snmp_indexes[$i]["value"], "index" => $snmp_indexes[$i]["value"], "oid" => $oid); } }elseif (($field_array["method"] == "get") && ($field_array["direction"] == "input")) { debug_log_insert("data_query", __("Located input field '%s' [get]", $field_name)); $rewritten_indexes = array(); if (isset($field_array["rewrite_index"])) { $rewritten_indexes = data_query_rewrite_indexes($errmsg, $device_id, $snmp_query_id, $field_array["rewrite_index"], $snmp_indexes, $fields_processed); if(sizeof($errmsg)){ foreach($errmsg as $message){ debug_log_insert("data_query", "Field '$field_name'" . $message); } } } for ($i=0; $i<sizeof($snmp_indexes); $i++) { $oid = $field_array["oid"]; if (isset($field_array["rewrite_index"])) { if (isset($rewritten_indexes[$snmp_indexes[$i]["value"]])) { $oid_suffix = $rewritten_indexes[$snmp_indexes[$i]["value"]]; }else{ // we failed to build rewritten index. warnings are sent already, just skip this index silently continue; } $oid .= "." . $oid_suffix; } else { $oid .= "." . $snmp_indexes[$i]["value"]; } $oid .= isset($field_array["oid_suffix"]) ? ("." . $field_array["oid_suffix"]) : ""; $value = NULL; if (substr($field_array["source"], 0, 13) == "VALUE/REGEXP:" || $field_array["source"] == "value") { $value = cacti_snmp_get($device["hostname"], $device["snmp_community"], $oid, $device["snmp_version"], $device["snmp_username"], $device["snmp_password"], $device["snmp_auth_protocol"], $device["snmp_priv_passphrase"], $device["snmp_priv_protocol"], $device["snmp_context"], $device["snmp_port"], $device["snmp_timeout"], SNMP_WEBUI); if (substr($field_array["source"], 0, 13) == "VALUE/REGEXP:") { $value = preg_replace("/" . str_replace("VALUE/REGEXP:", "", $field_array["source"]) . "/", "\\1", $value); } } else if(substr($field_array["source"], 0, 11) == "OID/REGEXP:") { $value = preg_replace("/" . str_replace("OID/REGEXP:", "", $field_array["source"]) . "/", "\\1", $oid); } debug_log_insert("data_query", __("Executing SNMP get for data") . " @ '$oid' [value='$value']"); $values[] = array( "value" => $value, "index" => $snmp_indexes[$i]["value"], "oid" => $oid); } } elseif (($field_array["method"] == "walk") && ($field_array["direction"] == "input")) { debug_log_insert("data_query", __("Located input field '%s' [walk]", $field_name)); $snmp_data = array(); $snmp_data = cacti_snmp_walk($device["hostname"], $device["snmp_community"], $field_array["oid"], $device["snmp_version"], $device["snmp_username"], $device["snmp_password"], $device["snmp_auth_protocol"], $device["snmp_priv_passphrase"], $device["snmp_priv_protocol"], $device["snmp_context"], $device["snmp_port"], $device["snmp_timeout"], $device["ping_retries"], $device["max_oids"], SNMP_WEBUI); debug_log_insert("data_query", __("Executing SNMP walk for data @ '%s'", $field_array["oid"])); if ($field_array["source"] == "value") { for ($i=0; $i<sizeof($snmp_data); $i++) { # Is this preg_replace functional? - JPP $snmp_index = preg_replace(isset($field_array["oid_index_parse"]) ? $field_array["oid_index_parse"] : $index_parse_regexp, "\\1", $snmp_data[$i]["oid"]); $oid = $field_array["oid"] . ".$snmp_index"; # deprecated in favour of "<rewrite_value>", bug#0001225 #if ($field_name == "ifOperStatus") { # if ((substr_count(strtolower($snmp_data[$i]["value"]), "down")) || # ($snmp_data[$i]["value"] == "2")) { # $snmp_data[$i]["value"] = __("Down"); # }else if ((substr_count(strtolower($snmp_data[$i]["value"]), "up")) || # ($snmp_data[$i]["value"] == "1")) { # $snmp_data[$i]["value"] = __("Up"); # }else if ((substr_count(strtolower($snmp_data[$i]["value"]), "notpresent")) || # ($snmp_data[$i]["value"] == "6")) { # $snmp_data[$i]["value"] = __("notPresent"); # }else{ # $snmp_data[$i]["value"] = __("Testing"); # } #} debug_log_insert("data_query", __("Found item [$field_name='%s'] index: %s [from value]", $snmp_data[$i]["value"], $snmp_index)); $values[] = array( "value" => $snmp_data[$i]["value"], "index" => $snmp_index, "oid" => $oid); } } elseif (substr($field_array["source"], 0, 11) == "OID/REGEXP:") { for ($i=0; $i<sizeof($snmp_data); $i++) { $value = preg_replace("/" . str_replace("OID/REGEXP:", "", $field_array["source"]) . "/", "\\1", $snmp_data[$i]["oid"]); if (isset($snmp_queries["oid_index_parse"])) { $snmp_index = preg_replace("/" . $index_parse_regexp . "/", "\\1", $snmp_data[$i]["oid"]); }else if ((isset($snmp_data[$i]["value"])) && ($snmp_data[$i]["value"] != "")) { $snmp_index = $snmp_data[$i]["value"]; } $oid = $field_array["oid"] . "." . $value; debug_log_insert("data_query", __("Found item [%s='%s'] index: %s [from regexp oid parse]", $field_name, $value, $snmp_index)); $values[] = array( "value" => $value, "index" => $snmp_index, "oid" => $oid); } }elseif (substr($field_array["source"], 0, 13) == "VALUE/REGEXP:") { for ($i=0; $i<sizeof($snmp_data); $i++) { $value = preg_replace("/" . str_replace("VALUE/REGEXP:", "", $field_array["source"]) . "/", "\\1", $snmp_data[$i]["value"]); $snmp_index = preg_replace("/" . $index_parse_regexp . "/", "\\1", $snmp_data[$i]["oid"]); $oid = $field_array["oid"] . "." . $value; debug_log_insert("data_query", __("Found item [%s='%s'] index: %s [from regexp value parse]", $field_name, $value, $snmp_index)); $values[] = array( "value" => $value, "index" => $snmp_index, "oid" => $oid); } } } if (sizeof($values)) { foreach($values as $item){ if(isset($field_array["rewrite_value"])) { $item["value"] = rewrite_snmp_enum_value($field_name, $item["value"], $field_array["rewrite_value"]); } $output_array[] = data_query_format_record($device_id, $snmp_query_id, $field_name, $item["value"], $item["index"], $item["oid"]); } $fields_processed[] = $field_name; } } if (sizeof($output_array)) { data_query_update_device_cache_from_buffer($device_id, $snmp_query_id, $output_array); } return true; }
function query_snmp_host($host_id, $snmp_query_id) { global $config; include_once $config["library_path"] . "/snmp.php"; $host = db_fetch_row("SELECT\n\t\thostname,\n\t\tsnmp_community,\n\t\tsnmp_version,\n\t\tsnmp_username,\n\t\tsnmp_password,\n\t\tsnmp_auth_protocol,\n\t\tsnmp_priv_passphrase,\n\t\tsnmp_priv_protocol,\n\t\tsnmp_context,\n\t\tsnmp_port,\n\t\tsnmp_timeout,\n\t\tping_retries,\n\t\tmax_oids\n\t\tFROM host\n\t\tWHERE id='{$host_id}'"); $snmp_queries = get_data_query_array($snmp_query_id); if ($host["hostname"] == "") { debug_log_insert("data_query", "Invalid host_id: {$host_id}"); return false; } /* invalid xml check */ if (!is_array($snmp_queries) || sizeof($snmp_queries) == 0) { debug_log_insert("data_query", "Error parsing XML file into an array."); return false; } debug_log_insert("data_query", "XML file parsed ok."); if (!verify_index_order($snmp_queries)) { debug_log_insert("data_query", "Invalid field <index_order>" . $snmp_queries["index_order"] . "</index_order>"); debug_log_insert("data_query", "Must contain <direction>input</direction> fields only"); return false; } /* provide data for oid_num_indexes, if given */ if (isset($snmp_queries["oid_num_indexes"])) { $snmp_num_indexes = cacti_snmp_get($host["hostname"], $host["snmp_community"], $snmp_queries["oid_num_indexes"], $host["snmp_version"], $host["snmp_username"], $host["snmp_password"], $host["snmp_auth_protocol"], $host["snmp_priv_passphrase"], $host["snmp_priv_protocol"], $host["snmp_context"], $host["snmp_port"], $host["snmp_timeout"], $host["ping_retries"], $host["max_oids"], SNMP_WEBUI); debug_log_insert("data_query", "Executing SNMP get for num of indexes @ '" . $snmp_queries["oid_num_indexes"] . "' Index Count: " . $snmp_num_indexes); } else { debug_log_insert("data_query", "<oid_num_indexes> missing in XML file, 'Index Count Changed' emulated by counting oid_index entries"); } /* fetch specified index at specified OID */ $snmp_indexes = cacti_snmp_walk($host["hostname"], $host["snmp_community"], $snmp_queries["oid_index"], $host["snmp_version"], $host["snmp_username"], $host["snmp_password"], $host["snmp_auth_protocol"], $host["snmp_priv_passphrase"], $host["snmp_priv_protocol"], $host["snmp_context"], $host["snmp_port"], $host["snmp_timeout"], $host["ping_retries"], $host["max_oids"], SNMP_WEBUI); debug_log_insert("data_query", "Executing SNMP walk for list of indexes @ '" . $snmp_queries["oid_index"] . "' Index Count: " . sizeof($snmp_indexes)); /* no data found; get out */ if (!sizeof($snmp_indexes)) { debug_log_insert("data_query", "No SNMP data returned"); return false; } else { /* show list of indices found */ for ($i = 0; $i < sizeof($snmp_indexes); $i++) { debug_log_insert("data_query", "Index found at OID: '" . $snmp_indexes[$i]["oid"] . "' value: '" . $snmp_indexes[$i]["value"] . "'"); } } /* the last octet of the oid is the index by default */ $index_parse_regexp = '.*\\.([0-9]+)$'; /* parse the index if required */ if (isset($snmp_queries["oid_index_parse"])) { $index_parse_regexp = str_replace("OID/REGEXP:", "", $snmp_queries["oid_index_parse"]); for ($i = 0; $i < sizeof($snmp_indexes); $i++) { $snmp_indexes[$i]["value"] = preg_replace('/' . $index_parse_regexp . '/', "\\1", $snmp_indexes[$i]["oid"]); debug_log_insert("data_query", "index_parse at OID: '" . $snmp_indexes[$i]["oid"] . "' results: '" . $snmp_indexes[$i]["value"] . "'"); } } /* set an array to host all updates */ $output_array = array(); while (list($field_name, $field_array) = each($snmp_queries["fields"])) { if (!isset($field_array["oid"]) && $field_array["source"] == "index") { for ($i = 0; $i < sizeof($snmp_indexes); $i++) { debug_log_insert("data_query", "Inserting index data for field '" . $field_name . "' [value='" . $snmp_indexes[$i]["value"] . "']"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $snmp_indexes[$i]["value"], $snmp_indexes[$i]["value"], ''); } } else { if ($field_array["method"] == "get" && $field_array["direction"] == "input") { debug_log_insert("data_query", "Located input field '{$field_name}' [get]"); if ($field_array["source"] == "value") { for ($i = 0; $i < sizeof($snmp_indexes); $i++) { $oid = $field_array["oid"] . "." . $snmp_indexes[$i]["value"]; $oid .= isset($field_array["oid_suffix"]) ? "." . $field_array["oid_suffix"] : ""; $value = cacti_snmp_get($host["hostname"], $host["snmp_community"], $oid, $host["snmp_version"], $host["snmp_username"], $host["snmp_password"], $host["snmp_auth_protocol"], $host["snmp_priv_passphrase"], $host["snmp_priv_protocol"], $host["snmp_context"], $host["snmp_port"], $host["snmp_timeout"], SNMP_WEBUI); debug_log_insert("data_query", "Executing SNMP get for data @ '{$oid}' [value='{$value}']"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $value, $snmp_indexes[$i]["value"], $oid); } } } else { if ($field_array["method"] == "walk" && $field_array["direction"] == "input") { debug_log_insert("data_query", "Located input field '{$field_name}' [walk]"); $snmp_data = array(); $snmp_data = cacti_snmp_walk($host["hostname"], $host["snmp_community"], $field_array["oid"], $host["snmp_version"], $host["snmp_username"], $host["snmp_password"], $host["snmp_auth_protocol"], $host["snmp_priv_passphrase"], $host["snmp_priv_protocol"], $host["snmp_context"], $host["snmp_port"], $host["snmp_timeout"], $host["ping_retries"], $host["max_oids"], SNMP_WEBUI); debug_log_insert("data_query", "Executing SNMP walk for data @ '" . $field_array["oid"] . "'"); if ($field_array["source"] == "value") { for ($i = 0; $i < sizeof($snmp_data); $i++) { $snmp_index = preg_replace('/' . (isset($field_array["oid_index_parse"]) ? $field_array["oid_index_parse"] : $index_parse_regexp) . '/', "\\1", $snmp_data[$i]["oid"]); $oid = $field_array["oid"] . ".{$snmp_index}"; if ($field_name == "ifOperStatus") { if (substr_count(strtolower($snmp_data[$i]["value"]), "down") || $snmp_data[$i]["value"] == "2") { $snmp_data[$i]["value"] = "Down"; } else { if (substr_count(strtolower($snmp_data[$i]["value"]), "up") || $snmp_data[$i]["value"] == "1") { $snmp_data[$i]["value"] = "Up"; } else { if (substr_count(strtolower($snmp_data[$i]["value"]), "notpresent") || $snmp_data[$i]["value"] == "6") { $snmp_data[$i]["value"] = "notPresent"; } else { $snmp_data[$i]["value"] = "Testing"; } } } } debug_log_insert("data_query", "Found item [{$field_name}='" . $snmp_data[$i]["value"] . "'] index: {$snmp_index} [from value]"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $snmp_data[$i]["value"], $snmp_index, $oid); } } elseif (substr($field_array["source"], 0, 11) == "OID/REGEXP:") { for ($i = 0; $i < sizeof($snmp_data); $i++) { $value = preg_replace('/' . str_replace("OID/REGEXP:", "", $field_array["source"]) . '/', "\\1", $snmp_data[$i]["oid"]); if (isset($snmp_queries["oid_index_parse"])) { $snmp_index = preg_replace('/' . $index_parse_regexp . '/', "\\1", $snmp_data[$i]["oid"]); } else { if (isset($snmp_data[$i]["value"]) && $snmp_data[$i]["value"] != "") { $snmp_index = $snmp_data[$i]["value"]; } } /* correct bogus index value */ /* found in some devices such as an EMC Cellera */ if ($snmp_index == 0) { $snmp_index = 1; } $oid = $field_array["oid"] . "." . $value; debug_log_insert("data_query", "Found item [{$field_name}='{$value}'] index: {$snmp_index} [from regexp oid parse]"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $value, $snmp_index, $oid); } } elseif (substr($field_array["source"], 0, 13) == "VALUE/REGEXP:") { for ($i = 0; $i < sizeof($snmp_data); $i++) { $value = preg_replace('/' . str_replace("VALUE/REGEXP:", "", $field_array["source"]) . '/', "\\1", $snmp_data[$i]["value"]); $snmp_index = preg_replace('/' . (isset($field_array["oid_index_parse"]) ? $field_array["oid_index_parse"] : $index_parse_regexp) . '/', "\\1", $snmp_data[$i]["oid"]); $oid = $field_array["oid"] . "." . $snmp_index; debug_log_insert("data_query", "Found item [{$field_name}='{$value}'] index: {$snmp_index} [from regexp value parse]"); $output_array[] = "('{$host_id}', '{$snmp_query_id}', '{$field_name}', '{$value}', '{$snmp_index}', '{$oid}', '1')"; } } } } } } data_query_update_host_cache_from_buffer($host_id, $snmp_query_id, $output_array); return true; }
function query_snmp_host($host_id, $snmp_query_id) { global $config; include_once($config["library_path"] . "/snmp.php"); $host = db_fetch_row("SELECT hostname, snmp_community, snmp_version, snmp_username, snmp_password, snmp_auth_protocol, snmp_priv_passphrase, snmp_priv_protocol, snmp_context, snmp_port, snmp_timeout, ping_retries, max_oids FROM host WHERE id='$host_id'"); $snmp_queries = get_data_query_array($snmp_query_id); if ($host["hostname"] == "") { debug_log_insert("data_query", "Invalid host_id: $host_id"); return false; } /* invalid xml check */ if ((!is_array($snmp_queries)) || (sizeof($snmp_queries) == 0)) { debug_log_insert("data_query", "Error parsing XML file into an array."); return false; } debug_log_insert("data_query", "XML file parsed ok."); /* fetch specified index at specified OID */ $snmp_indexes = cacti_snmp_walk($host["hostname"], $host["snmp_community"], $snmp_queries["oid_index"], $host["snmp_version"], $host["snmp_username"], $host["snmp_password"], $host["snmp_auth_protocol"], $host["snmp_priv_passphrase"], $host["snmp_priv_protocol"], $host["snmp_context"], $host["snmp_port"], $host["snmp_timeout"], $host["ping_retries"], $host["max_oids"], SNMP_WEBUI); debug_log_insert("data_query", "Executing SNMP walk for list of indexes @ '" . $snmp_queries["oid_index"] . "'"); /* no data found; get out */ if (!$snmp_indexes) { debug_log_insert("data_query", "No SNMP data returned"); return false; } else { /* show list of indices found */ for ($i=0; $i<sizeof($snmp_indexes); $i++) { debug_log_insert("data_query", "Index found at OID: '" . $snmp_indexes[$i]["oid"] . "' value: '" . $snmp_indexes[$i]["value"] . "'"); } } /* the last octet of the oid is the index by default */ $index_parse_regexp = '.*\.([0-9]+)$'; /* parse the index if required */ if (isset($snmp_queries["oid_index_parse"])) { $index_parse_regexp = str_replace("OID/REGEXP:", "", $snmp_queries["oid_index_parse"]); for ($i=0; $i<sizeof($snmp_indexes); $i++) { $snmp_indexes[$i]["value"] = ereg_replace($index_parse_regexp, "\\1", $snmp_indexes[$i]["oid"]); debug_log_insert("data_query", "index_parse at OID: '" . $snmp_indexes[$i]["oid"] . "' results: '" . $snmp_indexes[$i]["value"] . "'"); } } /* set an array to host all updates */ $output_array = array(); while (list($field_name, $field_array) = each($snmp_queries["fields"])) { if ((!isset($field_array["oid"])) && ($field_array["source"] == "index")) { for ($i=0; $i<sizeof($snmp_indexes); $i++) { debug_log_insert("data_query", "Inserting index data for field '" . $field_name . "' [value='" . $snmp_indexes[$i]["value"] . "']"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $snmp_indexes[$i]["value"], $snmp_indexes[$i]["value"], ''); } }else if (($field_array["method"] == "get") && ($field_array["direction"] == "input")) { debug_log_insert("data_query", "Located input field '$field_name' [get]"); if ($field_array["source"] == "value") { for ($i=0; $i<sizeof($snmp_indexes); $i++) { $oid = $field_array["oid"] . "." . $snmp_indexes[$i]["value"]; $value = cacti_snmp_get($host["hostname"], $host["snmp_community"], $oid, $host["snmp_version"], $host["snmp_username"], $host["snmp_password"], $host["snmp_auth_protocol"], $host["snmp_priv_passphrase"], $host["snmp_priv_protocol"], $host["snmp_context"], $host["snmp_port"], $host["snmp_timeout"], SNMP_WEBUI); debug_log_insert("data_query", "Executing SNMP get for data @ '$oid' [value='$value']"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $value, $snmp_indexes[$i]["value"],$oid); } } }else if (($field_array["method"] == "walk") && ($field_array["direction"] == "input")) { debug_log_insert("data_query", "Located input field '$field_name' [walk]"); $snmp_data = array(); $snmp_data = cacti_snmp_walk($host["hostname"], $host["snmp_community"], $field_array["oid"], $host["snmp_version"], $host["snmp_username"], $host["snmp_password"], $host["snmp_auth_protocol"], $host["snmp_priv_passphrase"], $host["snmp_priv_protocol"], $host["snmp_context"], $host["snmp_port"], $host["snmp_timeout"], $host["ping_retries"], $host["max_oids"], SNMP_WEBUI); debug_log_insert("data_query", "Executing SNMP walk for data @ '" . $field_array["oid"] . "'"); if ($field_array["source"] == "value") { for ($i=0; $i<sizeof($snmp_data); $i++) { $snmp_index = ereg_replace(isset($field_array["oid_index_parse"]) ? $field_array["oid_index_parse"] : $index_parse_regexp, "\\1", $snmp_data[$i]["oid"]); $oid = $field_array["oid"] . ".$snmp_index"; if ($field_name == "ifOperStatus") { if ((substr_count(strtolower($snmp_data[$i]["value"]), "down")) || ($snmp_data[$i]["value"] == "2")) { $snmp_data[$i]["value"] = "Down"; }else if ((substr_count(strtolower($snmp_data[$i]["value"]), "up")) || ($snmp_data[$i]["value"] == "1")) { $snmp_data[$i]["value"] = "Up"; }else if ((substr_count(strtolower($snmp_data[$i]["value"]), "notpresent")) || ($snmp_data[$i]["value"] == "6")) { $snmp_data[$i]["value"] = "notPresent"; }else{ $snmp_data[$i]["value"] = "Testing"; } } debug_log_insert("data_query", "Found item [$field_name='" . $snmp_data[$i]["value"] . "'] index: $snmp_index [from value]"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $snmp_data[$i]["value"] , $snmp_index, $oid); } }elseif (substr($field_array["source"], 0, 11) == "OID/REGEXP:") { for ($i=0; $i<sizeof($snmp_data); $i++) { $value = ereg_replace(str_replace("OID/REGEXP:", "", $field_array["source"]), "\\1", $snmp_data[$i]["oid"]); if (isset($snmp_queries["oid_index_parse"])) { $snmp_index = ereg_replace($index_parse_regexp, "\\1", $snmp_data[$i]["oid"]); }else if ((isset($snmp_data[$i]["value"])) && ($snmp_data[$i]["value"] != "")) { $snmp_index = $snmp_data[$i]["value"]; } /* correct bogus index value */ /* found in some devices such as an EMC Cellera */ if ($snmp_index == 0) { $snmp_index = 1; } $oid = $field_array["oid"] . "." . $value; debug_log_insert("data_query", "Found item [$field_name='$value'] index: $snmp_index [from regexp oid parse]"); $output_array[] = data_query_format_record($host_id, $snmp_query_id, $field_name, $value, $snmp_index, $oid); } }elseif (substr($field_array["source"], 0, 13) == "VALUE/REGEXP:") { for ($i=0; $i<sizeof($snmp_data); $i++) { $value = ereg_replace(str_replace("VALUE/REGEXP:", "", $field_array["source"]), "\\1", $snmp_data[$i]["value"]); $snmp_index = ereg_replace($index_parse_regexp, "\\1", $snmp_data[$i]["oid"]); $oid = $field_array["oid"] . "." . $value; debug_log_insert("data_query", "Found item [$field_name='$value'] index: $snmp_index [from regexp value parse]"); $output_array[] = "('$host_id', '$snmp_query_id', '$field_name', '$value', '$snmp_index', '$oid', '1')"; } } } } if (sizeof($output_array)) { data_query_update_host_cache_from_buffer($host_id, $snmp_query_id, $output_array); } return true; }