#!/usr/bin/env php '.1.3.6.1.2.1.25.2.3.1.5', 'totalin' => '.1.3.6.1.2.1.25.2.3.1.5', 'used' => '.1.3.6.1.2.1.25.2.3.1.6', 'failures' => '.1.3.6.1.2.1.25.2.3.1.7', 'index' => '.1.3.6.1.2.1.25.2.3.1.1', 'description' => '.1.3.6.1.2.1.25.2.3.1.3', 'sau' => '.1.3.6.1.2.1.25.2.3.1.4' ]; if ($cmd == 'index') { $return_arr = ss_host_disk_reindex( cacti_snmp_walk($hostname, $snmp_community, $oids['index'], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER) ); if (cacti_sizeof($return_arr)) { foreach ($return_arr as $item) { print $item . "\n"; } } } elseif ($cmd == 'num_indexes') { $return_arr = ss_host_disk_reindex( cacti_snmp_walk($hostname, $snmp_community, $oids['index'], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER) ); return cacti_sizeof($return_arr); } elseif ($cmd == 'query') { $arg = $arg1; $arr_index = ss_host_disk_reindex( cacti_snmp_walk($hostname, $snmp_community, $oids['index'], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER) ); if (cacti_sizeof($arr_index)) { $arr = ss_host_disk_reindex( cacti_snmp_walk($hostname, $snmp_community, $oids[$arg], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER) ); if (cacti_sizeof($arr)) { for ($i = 0; ($i < cacti_sizeof($arr_index)); $i++) { if (isset($arr[$i])) { print $arr_index[$i] . '!' . $arr[$i] . "\n"; } else { print $arr_index[$i] . '!' . "Unknown\n"; } } } else { return ''; } } else { return ''; } } elseif ($cmd == 'get') { $arg = $arg1; $index = $arg2; $value = api_plugin_hook_function('hmib_get_disk', ['host_id' => $host_id, 'arg' => $arg, 'index' => $index]); if (is_array($value)) { if (($arg == 'total') || ($arg == 'used')) { $sau = preg_replace('/[^0-9]/i', '', db_fetch_cell_prepared("SELECT field_value FROM host_snmp_cache WHERE host_id = ? AND field_name = 'hrStorageAllocationUnits' AND snmp_index = ?", [$host_id, $index])); $sau = intval($sau); $snmp_data = cacti_snmp_get($hostname, $snmp_community, $oids[$arg] . ".$index", $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, SNMP_POLLER); if ($snmp_data != '' && $snmp_data < 0) { $snmp_data = intval($snmp_data); return (abs($snmp_data) + 2147483647) * $sau; } if (is_numeric($snmp_data)) { return $snmp_data * $sau; } else { return 'U'; } } else { return cacti_snmp_get($hostname, $snmp_community, $oids[$arg] . ".$index", $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, SNMP_POLLER); } } else { return $value; } } return null; } function ss_host_disk_reindex(array $arr) : array { $return_arr = []; if (cacti_sizeof($arr)) { for ($i = 0; ($i < cacti_sizeof($arr)); $i++) { if (!isset($arr[$i]['value'])) { return []; } $return_arr[$i] = $arr[$i]['value']; } } return $return_arr; }