1<?php 2 3error_reporting(0); 4 5include(dirname(__FILE__) . '/../include/cli_check.php'); 6include(dirname(__FILE__) . '/../lib/snmp.php'); 7 8$oids = array( 9 'index' => '.1.3.6.1.2.1.25.3.3.1', 10 'usage' => '.1.3.6.1.2.1.25.3.3.1' 11); 12 13$hostname = $_SERVER['argv'][1]; 14$host_id = $_SERVER['argv'][2]; 15$snmp_auth = $_SERVER['argv'][3]; 16$cmd = $_SERVER['argv'][4]; 17 18/* support for SNMP V2 and SNMP V3 parameters */ 19$snmp = explode(':', $snmp_auth); 20$snmp_version = $snmp[0]; 21$snmp_port = $snmp[1]; 22$snmp_timeout = $snmp[2]; 23$ping_retries = $snmp[3]; 24$max_oids = $snmp[4]; 25 26$snmp_auth_username = ''; 27$snmp_auth_password = ''; 28$snmp_auth_protocol = ''; 29$snmp_priv_passphrase = ''; 30$snmp_priv_protocol = ''; 31$snmp_context = ''; 32$snmp_community = ''; 33 34if ($snmp_version == 3) { 35 $snmp_auth_username = $snmp[6]; 36 $snmp_auth_password = $snmp[7]; 37 $snmp_auth_protocol = $snmp[8]; 38 $snmp_priv_passphrase = $snmp[9]; 39 $snmp_priv_protocol = $snmp[10]; 40 $snmp_context = $snmp[11]; 41} else { 42 $snmp_community = $snmp[5]; 43} 44 45/* 46 * process INDEX requests 47 */ 48if ($cmd == 'index') { 49 $arr_index = get_indexes($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER); 50 51 for ($i=0;($i<cacti_sizeof($arr_index));$i++) { 52 print $arr_index[$i] . PHP_EOL; 53 } 54 55/* 56 * process NUM_INDEXES requests 57 */ 58} elseif ($cmd == 'num_indexes') { 59 $arr_index = get_indexes($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER); 60 61 print cacti_sizeof($arr_index) . PHP_EOL; 62 63/* 64 * process QUERY requests 65 */ 66} elseif ($cmd == 'query') { 67 $arg = $_SERVER['argv'][5]; 68 69 $arr_index = get_indexes($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids); 70 $arr = get_cpu_usage($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids); 71 72 for ($i=0;($i<cacti_sizeof($arr_index));$i++) { 73 if ($arg == 'usage') { 74 print $arr_index[$i] . '!' . $arr[$i] . PHP_EOL; 75 } elseif ($arg == 'index') { 76 print $arr_index[$i] . '!' . $arr_index[$i] . PHP_EOL; 77 } 78 } 79} elseif ($cmd == 'get') { 80 $arg = $_SERVER['argv'][5]; 81 $index = $_SERVER['argv'][6]; 82 83 $arr_index = get_indexes($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids); 84 $arr = get_cpu_usage($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids); 85 86 if (isset($arr_index[$index])) { 87 print $arr[$index]; 88 } 89} 90 91function get_cpu_usage($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids) { 92 $arr = reindex(cacti_snmp_walk($hostname, $snmp_community, '.1.3.6.1.2.1.25.3.3.1', $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER)); 93 $return_arr = array(); 94 95 $j = 0; 96 97 for ($i=0;($i<cacti_sizeof($arr));$i++) { 98 if (preg_match('/^[0-9]+$/', $arr[$i])) { 99 $return_arr[$j] = $arr[$i]; 100 $j++; 101 } 102 } 103 104 return $return_arr; 105} 106 107function get_indexes($hostname, $snmp_community, $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids) { 108 $arr = reindex(cacti_snmp_walk($hostname, $snmp_community, '.1.3.6.1.2.1.25.3.3.1', $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER)); 109 $return_arr = array(); 110 111 $j = 0; 112 113 for ($i=0;($i<cacti_sizeof($arr));$i++) { 114 if (preg_match('/^[0-9]+$/', $arr[$i])) { 115 $return_arr[$j] = $j; 116 $j++; 117 } 118 } 119 120 return $return_arr; 121} 122 123function reindex($arr) { 124 $return_arr = array(); 125 126 for ($i=0;($i<cacti_sizeof($arr));$i++) { 127 $return_arr[$i] = $arr[$i]['value']; 128 } 129 130 return $return_arr; 131} 132 133