Скрипт опроса Juniper COS

Сервер скрипт положить |cacti_path|/resourse/script-server/
juniper_cos_interfaces:
<interface>
        <name>Get Interface Traffic Information</name>
        <script_path>/var/cacti/scripts/query_juniper_cos.php</script_path>
        <script_server>php</script_server>
        <script_function>query_cos</script_function>
        <arg_prepend>|host_hostname| |host_snmp_community|:|host_snmp_version|:|host_snmp_port|:|host_snmp_timeout|:|host_snmp_username|:|host_snmp_password|</arg_prepend>
        <arg_index>index</arg_index>
        <arg_query>query</arg_query>
        <arg_get>get</arg_get>
        <output_delimeter>!</output_delimeter>
        <index_order>ifIndex</index_order>
        <index_order_type>numeric</index_order_type>
        <index_title_format>|chosen_order_field|</index_title_format>
   <fields>
                <ifIndex>
                        <name>Index</name>
                        <direction>input</direction>
                        <query_name>index</query_name>
                </ifIndex>

                <ifStatus>
                        <name>Status</name>
                        <direction>input</direction>
                        <query_name>ifStatus</query_name>
                </ifStatus>

                <ifDescription>
                        <name>Description</name>
                        <direction>input</direction>
                        <query_name>ifDescription</query_name>
                </ifDescription>

                <ifName>
                        <name>Name</name>
                        <direction>input</direction>
                        <query_name>ifName</query_name>
                </ifName>

                <ifAlias>
                        <name>Alias</name>
                        <direction>input</direction>
                        <query_name>ifAlias</query_name>
                </ifAlias>

                <ifType>
                        <name>Type</name>
                        <direction>input</direction>
                        <query_name>ifType</query_name>
                </ifType>
                <ifSpeed>
                        <name>Speed</name>
                        <direction>input</direction>
                        <query_name>ifSpeed</query_name>
                </ifSpeed>
                <queued.0>
                        <name>Queued packets Q nro 0</name>
                        <direction>input</direction>
                        <query_name>queued.0</query_name>
                </queued.0>
                <queued.1>
                        <name>Queued packets Q nro 1</name>
                        <direction>input</direction>
                        <query_name>queued.1</query_name>
                </queued.1>
                <queued.2>
                        <name>Queued packets Q nro 2</name>
                        <direction>input</direction>
                        <query_name>queued.2</query_name>
                </queued.2>
                <queued.3>
                        <name>Queued packets Q nro 3</name>
                        <direction>input</direction>
                        <query_name>queued.3</query_name>
                </queued.3>
                <queued.4>
                        <name>Queued packets Q nro 4</name>
                        <direction>input</direction>
                        <query_name>queued.4</query_name>
                </queued.4>
                <queued.5>
                        <name>Queued packets Q nro 5</name>
                        <direction>input</direction>
                        <query_name>queued.5</query_name>
                </queued.5>
                <queued.6>
                        <name>Queued packets Q nro 6</name>
                        <direction>input</direction>
                        <query_name>queued.6</query_name>
                </queued.6>
                <queued.7>
                        <name>Queued packets Q nro 7</name>
                        <direction>input</direction>
                        <query_name>queued.7</query_name>
                </queued.7>
                <dropped.0>
                        <name>Dropped packets Q nro 0</name>
                        <direction>input</direction>
                        <query_name>dropped.0</query_name>
                </dropped.0>
                <dropped.1>
                        <name>Dropped packets Q nro 1</name>
                        <direction>input</direction>
                        <query_name>dropped.1</query_name>
                </dropped.1>
                <dropped.2>
                        <name>Dropped packets Q nro 2</name>
                        <direction>input</direction>
                        <query_name>dropped.2</query_name>
                </dropped.2>
                <dropped.3>
                        <name>Dropped packets Q nro 3</name>
                        <direction>input</direction>
                        <query_name>dropped.3</query_name>
                </dropped.3>
                <dropped.4>
                        <name>Dropped packets Q nro 4</name>
                        <direction>input</direction>
                        <query_name>dropped.4</query_name>
                </dropped.4>
                <dropped.5>
                        <name>Dropped packets Q nro 5</name>
                        <direction>input</direction>
                        <query_name>dropped.5</query_name>
                </dropped.5>
                <dropped.6>
                        <name>Dropped packets Q nro 6</name>
                        <direction>input</direction>
                        <query_name>dropped.6</query_name>
                </dropped.6>
                <dropped.7>
                        <name>Dropped packets Q nro 7</name>
                        <direction>input</direction>
                        <query_name>dropped.7</query_name>
                </dropped.7>
                <queued.0>
                        <name>Queued packets Q nro 0</name>
                        <direction>output</direction>
                        <query_name>queued.0</query_name>
                </queued.0>
                <queued.1>
                        <name>Queued packets Q nro 1</name>
                        <direction>output</direction>
                        <query_name>queued.1</query_name>
                </queued.1>
                <queued.2>
                        <name>Queued packets Q nro 2</name>
                        <direction>output</direction>
                        <query_name>queued.2</query_name>
                </queued.2>
                <queued.3>
                        <name>Queued packets Q nro 3</name>
                        <direction>output</direction>
                        <query_name>queued.3</query_name>
                </queued.3>
                <queued.4>
                        <name>Queued packets Q nro 4</name>
                        <direction>output</direction>
                        <query_name>queued.4</query_name>
                </queued.4>
                <queued.5>
                        <name>Queued packets Q nro 5</name>
                        <direction>output</direction>
                        <query_name>queued.5</query_name>
                </queued.5>
                <queued.6>
                        <name>Queued packets Q nro 6</name>
                        <direction>output</direction>
                        <query_name>queued.6</query_name>
                </queued.6>
                <queued.7>
                        <name>Queued packets Q nro 7</name>
                        <direction>output</direction>
                        <query_name>queued.7</query_name>
                </queued.7>
                <dropped.0>
                        <name>Dropped packets Q nro 0</name>
                        <direction>output</direction>
                        <query_name>dropped.0</query_name>
                </dropped.0>
                <dropped.1>
                        <name>Dropped packets Q nro 1</name>
                        <direction>output</direction>
                        <query_name>dropped.1</query_name>
                </dropped.1>
                <dropped.2>
                        <name>Dropped packets Q nro 2</name>
                        <direction>output</direction>
                        <query_name>dropped.2</query_name>
                </dropped.2>
                <dropped.3>
                        <name>Dropped packets Q nro 3</name>
                        <direction>output</direction>
                        <query_name>dropped.3</query_name>
                </dropped.3>
                <dropped.4>
                        <name>Dropped packets Q nro 4</name>
                        <direction>output</direction>
                        <query_name>dropped.4</query_name>
                </dropped.4>
                <dropped.5>
                        <name>Dropped packets Q nro 5</name>
                        <direction>output</direction>
                        <query_name>dropped.5</query_name>
                </dropped.5>
                <dropped.6>
                        <name>Dropped packets Q nro 6</name>
                        <direction>output</direction>
                        <query_name>dropped.6</query_name>
                </dropped.6>
                <dropped.7>
                        <name>Dropped packets Q nro 7</name>
                        <direction>output</direction>
                        <query_name>dropped.7</query_name>
                </dropped.7>
        </fields>
</interface>
Это положить в |cacti_path|/scripts/
#!/usr/bin/php
<?php
$debug=0;
ini_set('display_errors',0);
error_reporting(E_ALL);
# deactivate http headers
$no_http_headers = true;
# include some cacti files for ease of use
/* do NOT run this script through a web browser */
if (!isset($_SERVER["argv"][0]) || isset($_SERVER['REQUEST_METHOD'])  || isset($_SERVER['REMOTE_ADDR'])) {
        die("<br><strong>This script is only meant to run at the command line.</strong>");
        }
$no_http_headers = true;
error_reporting(0);
//array_shift($_SERVER["argv"]);
include_once(dirname(__FILE__) . "/../include/global.php");
include_once(dirname(__FILE__) . "/../lib/snmp.php");
include_once(dirname(__FILE__) . "/../lib/ping.php");
writelog ("Start script**************************************\n"," ");
if (!isset($called_by_script_server)) 
    {
    include_once(dirname(__FILE__) . "/../include/global.php");
    include_once(dirname(__FILE__) . "/../lib/snmp.php");
    include_once(dirname(__FILE__) . "/../lib/ping.php");
    writelog ("Called without script server\n"," ");
//    array_shift($_SERVER["argv"]);
    array_shift($_SERVER["argv"]);
    while (count($_SERVER["argv"])<5)
    {array_push($_SERVER["argv"],"");}
    $result=call_user_func_array("query_cos", $_SERVER["argv"]);
//    print ($result);
    }
                                        
#
#
#
function query_cos($hostname,$snmp_auth,$cmd,$query_field,$query_index)
{
$snmp = explode(":", $snmp_auth);
$snmp_community = $snmp[0]; 
        $snmp_version   = $snmp[1]; 
        $snmp_port      = $snmp[2]; 
        $snmp_timeout   = $snmp[3]; 
        $snmp_user     = ""; 
        $snmp_pw     = ""; 
 
        if ($snmp_version == 3) 
        { 
        $snmp_user   = $snmp[4];
        $snmp_pw   = $snmp[5];
        }
if (!isset($query_field)) {$query_field="";}
if (!isset($query_index)) {$query_index="";}
# define all OIDs we need for further processing
writelog("Getting data hostname=",$hostname);
writelog("Getting data snmp=",$snmp_auth);
writelog("Getting data cmd=",$cmd);
writelog("Getting data 1=",$query_field);
writelog("Getting data 2=",$query_index);

    $oids = array(
        "index"         => ".1.3.6.1.2.1.2.2.1.1",
        "ifStatus"      => ".1.3.6.1.2.1.2.2.1.8",
        "ifDescription" => ".1.3.6.1.2.1.2.2.1.2",
        "ifName"        => ".1.3.6.1.2.1.31.1.1.1.1",
        "ifAlias"       => ".1.3.6.1.2.1.31.1.1.1.18",
        "ifType"        => ".1.3.6.1.2.1.2.2.1.3",
        "ifSpeed"       => ".1.3.6.1.2.1.2.2.1.5",
        "ifHWaddress"   => ".1.3.6.1.2.1.2.2.1.6",
        "ifInOctets"    => ".1.3.6.1.2.1.2.2.1.10",
        "ifOutOctets"   => ".1.3.6.1.2.1.2.2.1.16",
        "FcIdName"      => ".1.3.6.1.4.1.2636.3.15.3.1.2",
        "FabricPriority" => ".1.3.6.1.4.1.2636.3.15.3.1.3",
        "jnxCosQstatTotalRedDropPkts"   => ".1.3.6.1.4.1.2636.3.15.4.1.13",
        "jnxCosQstatTailDropPkts" => ".1.3.6.1.4.1.2636.3.15.4.1.11",
        "jnxCosQstatQedPkts"     => ".1.3.6.1.4.1.2636.3.15.4.1.3",
"jnxCosQstatQedBytes" => ".1.3.6.1.4.1.2636.3.15.4.1.5",
        "jnxCosQstatTxedPkts"       => ".1.3.6.1.4.1.2636.3.15.4.1.7",
        "jnxCosQstatTxedBytes"       => ".1.3.6.1.4.1.2636.3.15.4.1.9",
        "jnxCosQstatTotalRedDropBytes"      => ".1.3.6.1.4.1.2636.3.15.4.1.23",
        "ifJnxInQDrops"       => ".1.3.6.1.4.1.2636.3.3.1.1.11",
        );
    $xml_delimiter          =  "!";
    # ToDo:
    # Separate queued and TX, Bytes & Pkts


    # get number of snmp retries from global settings
    $snmp_retries   = read_config_option("snmp_retries");

    ob_start();

    if ($cmd == "index") {
        # retrieve all indices from target
        $return_arr = reindex(cacti_snmp_walk($hostname, $snmp_community, $oids["index"],
                                              $snmp_version, $snmp_user, $snmp_pw, $snmp_port,
                                              $snmp_timeout, $snmp_retries, ""));
        # and print each index as a separate line
        for ($i=0;($i<sizeof($return_arr));$i++) 
        {
                if (cacti_snmp_get($hostname, $snmp_community, $oids["jnxCosQstatQedPkts"]. "." .$return_arr[$i].".0", $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "") != "" )
                {
                print ($return_arr[$i] . "\n");
                $result="";
}
        }
    } 
    elseif ($cmd == "query") 
    {

        $arr_index = reindex(cacti_snmp_walk($hostname, $snmp_community, $oids["index"],
                                             $snmp_version, $snmp_user, $snmp_pw, $snmp_port,
                                             $snmp_timeout, $snmp_retries, ""));

$arr_cosindex = array();
        for ($i=0;($i<sizeof($arr_index));$i++) 
        {
                if (cacti_snmp_get($hostname, $snmp_community, $oids["jnxCosQstatQedPkts"]. "." .$arr_index[$i].".0", $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "") != "")
                {
array_push ($arr_cosindex, $arr_index[$i]);
                }
        }
if (strpos($query_field, "queued") !== false)
{
$cosqnro = strstr($query_field, ".");
                for ($i=0;($i<sizeof($arr_cosindex));$i++) 
                {
$new = $oids["jnxCosQstatQedPkts"]. "." .$arr_cosindex[$i]. $cosqnro;
$data=$new;
writelog("Get oid ",$data);
echo "$arr_cosindex[$i]".$xml_delimiter;
$result=cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
echo $result."\n";
}


elseif (strpos($query_field, "dropped") !== false)
{
                $cosqnro = strstr($query_field, ".");
                for ($i=0;($i<sizeof($arr_cosindex));$i++) 
                {
                        $new = $oids["jnxCosQstatTotalRedDropPkts"]. "." .$arr_cosindex[$i]. $cosqnro;
                        $data=$new;
writelog("Get oid ",$data);
echo "\n$arr_cosindex[$i]".$xml_delimiter;
                        $red = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
                        $new = $oids["jnxCosQstatTailDropPkts"]. "." .$arr_cosindex[$i]. $cosqnro;
                        $data=$new;
writelog("Get oid ",$data);
                        $tail = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
$result=$red + $tail;
echo $result."\n";
                }

else 
{
                for ($i=0;($i<sizeof($arr_cosindex));$i++) 
                {
print $arr_cosindex[$i] . $xml_delimiter;
$result=cacti_snmp_get($hostname, $snmp_community, $oids[$query_field]. "." .$arr_cosindex[$i], $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
                        echo $result."\n";
}
}
    }
    elseif ($cmd == "get") 
    {
    writelog("Command = ",$cmd);
        if (strpos($query_field, "queued") !== false){
                $cosqnro = strstr($query_field, ".");
                $new = $oids["jnxCosQstatQedPkts"]. "." .$query_index. $cosqnro;
                $data=$new;
writelog("Get oid ",$data);
                $result=print (cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, ""));
echo $result."\n";
        } 
        elseif (strpos($query_field, "dropped") !== false)
        {
       writelog("query field = ",$query_field);
                $cosqnro = strstr($query_field, ".");
                $new = $oids["jnxCosQstatTotalRedDropPkts"]. "." .$query_index. $cosqnro;
                $data=$new;
writelog("Get oid ",$data);
                $red = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
                writelog("Get red packets ",$red);
                $new = $oids["jnxCosQstatTailDropPkts"]. "." .$query_index. $cosqnro;
                $data=$new;
writelog("Get oid ",$data);
                $tail = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
                writelog("Get tail packets ",$tail);
                $result=$red + $tail;
                writelog("red+tail packets ",$result);
                echo $result."\n";
                
        } 
        else 
        {
        $result=cacti_snmp_get($hostname, $snmp_community, $oids[$query_field] .
                              ".$query_index", $snmp_version, $snmp_user, $snmp_pw,
                              $snmp_port, $snmp_timeout, $snmp_retries, "");
                              echo $result."\n";
}
    } 
    else 
    {
        print "Invalid use of script query, required parameters:\n\n";
        print "    <hostname> <community> <version> <snmp_port> <timeout> <user> <pw> <cmd>\n";
    }
$captured = ob_get_contents();
ob_end_clean();
echo trim($captured);
return $result;
}
 
function writelog ($message,$data)
{
global $debug;
if ($debug != 0)
{
$F = fopen("/var/cacti/log/query_juniper_if_cos.log", "a");
fputs($F,"$message $data\n");
fclose($F);
}
function reindex($arr) {
        $return_arr = array();
 
        for ($i=0;($i<sizeof($arr));$i++) {
                $return_arr[$i] = $arr[$i]["value"];
        }
 
        return $return_arr;
}
 
?>

Комментариев нет:

Отправить комментарий