accesspoint support (probably) from ethan sommer (#50)

git-svn-id: http://www.observium.org/svn/observer/trunk@3223 61d68cd4-352d-0410-923a-c4978735b2b8
This commit is contained in:
Adam Amstrong
2012-05-21 18:17:23 +00:00
parent fcef689504
commit d3796004ae
21 changed files with 596 additions and 2 deletions
+10
View File
@@ -279,6 +279,16 @@ function device_by_name($name, $refresh = 0)
return device_by_id_cache(getidbyname($name), $refresh);
}
function accesspoint_by_id($ap_id, $refresh = '0') {
$ap = dbFetchRow("SELECT * FROM `accesspoint` WHERE `accesspoint_id` = ?", array($ap_id));
return $ap;
}
function device_by_id_cache($device_id, $refresh = '0')
{
global $cache;
+14
View File
@@ -65,6 +65,20 @@ $config['memcached']['port'] = 11211;
$config['slow_statistics'] = TRUE; ### THIS WILL CHANGE TO FALSE IN FUTURE
### RRD Format Settings
### These should not normally be changed
### Though one could conceivably increase or decrease the size of each RRA if one had performance problems
### Or if one had a very fast I/O subsystem with no performance worries.
$config['rrd_rra'] = " RRA:AVERAGE:0.5:1:2016 RRA:AVERAGE:0.5:6:1440 RRA:AVERAGE:0.5:24:1440 RRA:AVERAGE:0.5:288:1440 ";
$config['rrd_rra'] .= " RRA:MAX:0.5:1:720 RRA:MIN:0.5:6:1440 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797 ";
$config['rrd_rra'] .= " RRA:MAX:0.5:1:720 RRA:MAX:0.5:6:1440 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797 ";
$config['rrd_rra'] .= " RRA:LAST:0.5:1:1440 ";
### RRDCacheD - Make sure it can write to your RRD dir!
#$config['rrdcached'] = "unix:/var/run/rrdcached.sock";
+4
View File
@@ -896,6 +896,10 @@ $os = "arubaos";
$config['os'][$os]['text'] = "ArubaOS";
$config['os'][$os]['type'] = "wireless";
$config['os'][$os]['icon'] = "arubaos";
$config['os'][$os]['over'][0]['graph'] = "device_arubacontroller_numaps";
$config['os'][$os]['over'][0]['text'] = "Number of APs";
$config['os'][$os]['over'][1]['graph'] = "device_arubacontroller_numclients";
$config['os'][$os]['over'][1]['text'] = "Number of Clients";
$os = "dsm";
$config['os'][$os]['text'] = "Synology DSM";
+146
View File
@@ -0,0 +1,146 @@
<?php
if ($device['type'] == 'wireless' && $device['os'] == 'arubaos')
{
global $config;
echo("Aruba Controller: ");
$polled = time();
//// Build SNMP Cache Array
//stuff about the controller
$switch_info_oids = array('wlsxSwitchRole','wlsxSwitchMasterIp');
$switch_counter_oids = array('wlsxSwitchTotalNumAccessPoints.0','wlsxSwitchTotalNumStationsAssociated.0');
$switch_apinfo_oids = array('wlsxWlanRadioEntry','wlanAPChInterferenceIndex');
$switch_apname_oids = array('wlsxWlanRadioEntry.16');
$aruba_oids=array_merge($switch_info_oids,$switch_counter_oids);
echo("Caching Oids: ");
foreach ($aruba_oids as $oid) { echo("$oid "); $aruba_stats = snmpwalk_cache_oid($device, $oid, $aruba_stats, "WLSX-SWITCH-MIB"); }
foreach ($switch_apinfo_oids as $oid) { echo("$oid "); $aruba_apstats = snmpwalk_cache_oid_num($device, $oid, $aruba_apstats, "WLSX-WLAN-MIB"); }
foreach ($switch_apname_oids as $oid) { echo("$oid "); $aruba_apnames = snmpwalk_cache_oid_num($device, $oid, $aruba_apnames, "WLSX-WLAN-MIB"); }
echo("\n");
$rrdfile = $host_rrd . "/aruba-controller".safename(".rrd");
if (!is_file($rrdfile))
{
rrdtool_create($rrdfile," --step 300 DS:NUMAPS:GAUGE:600:0:12500000000 DS:NUMCLIENTS:GAUGE:600:0:12500000000 ".$config['rrd_rra']);
}
$cont_rrd_update="$polled:".$aruba_stats[0]['wlsxSwitchTotalNumAccessPoints'].":".$aruba_stats[0]['wlsxSwitchTotalNumStationsAssociated'];
$ret = rrdtool_update($rrdfile,$cont_rrd_update);
// also save the info about how many clients in the same place as the wireless module
$wificlientsrrd = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("wificlients-radio1.rrd");
if (!is_file($wificlientsrrd))
{
rrdtool_create($wificlientsrrd,"--step 300 DS:wificlients:GAUGE:600:-273:10000 ".$config['rrd_rra']);
}
rrdtool_update($wificlientsrrd,"N:".$aruba_stats[0]['wlsxSwitchTotalNumStationsAssociated']);
$graphs['wifi_clients'] = TRUE;
$ap_db = dbFetchRows("SELECT * FROM `accesspoint` WHERE `device_id` = ?", array($device['device_id']));
foreach ($aruba_apnames as $key => $value) {
$radioid=str_replace("1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.16.","",$key);
$name=$value[''];
$type =$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.2.$radioid"][''];
$channel =$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.3.$radioid"]['']+0;
$txpow =$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.4.$radioid"]['']+0;
$radioutil =$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.6.$radioid"]['']+0;
$numasoclients=$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.7.$radioid"]['']+0;
$nummonclients=$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.8.$radioid"]['']+0;
$numactbssid =$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.9.$radioid"]['']+0;
$nummonbssid =$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.10.$radioid"]['']+0;
$interference =$aruba_apstats["1.3.6.1.4.1.14823.2.2.1.5.3.1.6.1.11.$radioid"]['']+0;
$radionum=substr($radioid,strlen($radioid)-1,1);
if ($debug)
{
echo("* radioid: $radioid\n");
echo(" radionum: $radionum\n");
echo(" name: $name\n");
echo(" type: $type\n");
echo(" channel: $channel\n");
echo(" txpow: $txpow\n");
echo(" radioutil: $radioutil\n");
echo(" numasoclients: $numasoclients\n");
echo(" interference: $interference\n");
}
// if there is a numeric channel, assume the rest of the data is valid, I guess
if (is_numeric($channel))
{
$rrd_file = $config['rrd_dir'] . "/" . $device['hostname'] ."/" .safename("arubaap-$name.$radionum.rrd");
if (!is_file($rrd_file))
{
$dslist="DS:channel:GAUGE:600:0:200 ";
$dslist.="DS:txpow:GAUGE:600:0:200 ";
$dslist.="DS:radioutil:GAUGE:600:0:100 ";
$dslist.="DS:nummonclients:GAUGE:600:0:500 ";
$dslist.="DS:nummonbssid:GAUGE:600:0:200 ";
$dslist.="DS:numasoclients:GAUGE:600:0:500 ";
$dslist.="DS:interference:GAUGE:600:0:2000 ";
rrdtool_create($rrd_file, "--step 300 $dslist ".$config['rrd_rra']);
}
rrdtool_update($rrd_file, "$polled:".$channel.":".$txpow.":".$radioutil.":".$nummonclients.":".$nummonbssid.":".$numasoclients.":".$interference);
}
//generate the mac address
$macparts=explode(".",$radioid,-1);
$mac="";
foreach ($macparts as $part) {
$mac.=sprintf("%02x",$part).":";
}
$mac=rtrim($mac,":");
$foundid=0;
for ($z=0;$z<sizeof($ap_db);$z++) {
if ($ap_db[$z]['name']==$name && $ap_db[$z]['radio_number']==$radionum) {
$foundid=$ap_db[$z]['accesspoint_id'];
$ap_db[$z]['seen']=1;
continue;
}
}
if ($foundid==0) {
$ap_id = dbInsert(array('device_id' => $device['device_id'], 'name' => $name,'radio_number'=>$radionum, 'type'=>$type,'mac_addr'=>$mac,'channel'=>$channel,'txpow'=>$txpow,'radioutil'=>$radioutil,'numasoclients'=>$numasoclients,'nummonclients'=>$nummonclients,'numactbssid'=>$numactbssid,'nummonbssid'=>$nummonbssid,'interference'=>$interference), 'accesspoint');
} else {
dbUpdate(array('mac_addr' => $mac,'deleted'=>0,'channel'=>$channel,'txpow'=>$txpow,'radioutil'=>$radioutil,'numasoclients'=>$numasoclients,'nummonclients'=>$nummonclients,'numactbssid'=>$numactbssid,'nummonbssid'=>$nummonbssid,'interference'=>$interference), 'accesspoint', '`accesspoint_id` = ?', Array($foundid));
}
}
//mark APs which are not on this controller anymore as deleted
for ($z=0;$z<sizeof($ap_db);$z++) {
if (!isset($ap_db[$z]['seen']) && $ap_db[$z]['deleted']==0) {
dbUpdate(array('deleted'=>1), 'accesspoint', '`accesspoint_id` = ?', Array($ap_db[$z]['accesspoint_id']));
}
}
}
?>
+15
View File
@@ -4,4 +4,19 @@
$badchars = array("(", ")", ",");
list(,,$hardware,,$version,) = str_replace($badchars, "", explode (" ", $poll_device['sysDescr']));
//// Build SNMP Cache Array
//stuff about the controller
$switch_info_oids = array('wlsxSwitchRole','wlsxSwitchMasterIp');
echo("Caching Oids: ");
foreach ($switch_info_oids as $oid) { echo("$oid "); $aruba_info = snmpwalk_cache_oid($device, $oid, $aruba_info, "WLSX-SWITCH-MIB"); }
echo("\n");
if ($aruba_info[0]['wlsxSwitchRole']=='master') {
$features="Master Controller";
} else {
$features="Local Controller for ".$aruba_info[0]['wlsxSwitchMasterIp'];
}
?>
+26
View File
@@ -121,6 +121,9 @@ function snmp_get($device, $oid, $options = NULL, $mib = NULL, $mibdir = NULL)
else { return false; }
}
function snmp_walk($device, $oid, $options = NULL, $mib = NULL, $mibdir = NULL)
{
global $debug,$config,$runtime_stats;
@@ -331,6 +334,29 @@ function snmpwalk_cache_oid($device, $oid, $array, $mib = NULL, $mibdir = NULL)
return $array;
}
// just like snmpwalk_cache_oid except that it returns the numerical oid as the index
// this is useful when the oid is indexed by the mac address and snmpwalk would
// return periods (.) for non-printable numbers, thus making many different indexes appear
// to be the same.
function snmpwalk_cache_oid_num($device, $oid, $array, $mib = NULL, $mibdir = NULL)
{
$data = snmp_walk($device, $oid, "-OQUn", $mib, $mibdir);
foreach (explode("\n", $data) as $entry)
{
list($oid,$value) = explode("=", $entry);
$oid = trim($oid); $value = trim($value);
list($oid, $index) = explode(".", $oid, 2);
if (!strstr($value, "at this OID") && isset($oid) && isset($index))
{
$array[$index][$oid] = $value;
}
}
return $array;
}
function snmpwalk_cache_multi_oid($device, $oid, $array, $mib = NULL, $mibdir = NULL)
{
global $cache;