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