88 lines
3.5 KiB
PHP
88 lines
3.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage poller
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
// Polling of wireless sessions data for Juniper Wireless (ex Trapeze)
|
|
|
|
// Cache DB entries
|
|
$sessions_db = dbFetchRows("SELECT `mac_addr` FROM `wifi_sessions` WHERE `device_id` = ?", [$device['device_id']]);
|
|
foreach ($sessions_db as $session_db) {
|
|
$clean_mac = str_replace([':', '-'], '', $session_db['mac_addr']);
|
|
$sessions_db[$clean_mac] = $session_db;
|
|
}
|
|
if (OBS_DEBUG && count($sessions_db)) {
|
|
print_vars($sessions_db);
|
|
}
|
|
|
|
$radios_db = dbFetchRows("SELECT `wifi_radio_id`, `radio_number`,`ap_number`, `wifi_accesspoints`.`device_id` FROM `wifi_accesspoints`, `wifi_radios` WHERE `wifi_radios`.`radio_ap` = wifi_accesspoints.`wifi_accesspoint_id` AND wifi_accesspoints.`device_id` = ?", [$device['device_id']]);
|
|
foreach ($radios_db as $radio_db) {
|
|
$radios_sorted_db[$radio_db['ap_number']][$radio_db['radio_number']] = $radio_db;
|
|
}
|
|
|
|
$sessions_array = snmpwalk_cache_oid($device, "trpzClSessClientSessionTable", $sessions_array, "TRAPEZE-NETWORKS-CLIENT-SESSION-MIB", NULL, OBS_SNMP_ALL_NUMERIC_INDEX);
|
|
if (OBS_DEBUG > 1 && count($sessions_array)) {
|
|
print_vars($sessions_array);
|
|
}
|
|
|
|
$timestamp = date('Y-m-d H:i:s', strtotime("now"));
|
|
// Goes through the SNMP sessions data
|
|
foreach ($sessions_array as $index => $session) {
|
|
[$a_a, $a_b, $a_c, $a_d, $a_e, $a_f] = explode(".", $index);
|
|
$clean_mac = zeropad(dechex($a_a)) . zeropad(dechex($a_b)) . zeropad(dechex($a_c)) . zeropad(dechex($a_d)) . zeropad(dechex($a_e)) . zeropad(dechex($a_f));
|
|
|
|
// Mapping OIDs<>DB
|
|
$db_oids = ['trpzClSessClientSessSessionId' => 'session_id',
|
|
'trpzClSessClientSessUsername' => 'username',
|
|
'trpzClSessClientSessIpAddress' => 'ipv4_addr',
|
|
'trpzClSessClientSessSsid' => 'ssid',
|
|
'trpzClSessClientSessSessionState' => 'state'];
|
|
|
|
$new_index = $clean_mac;
|
|
|
|
foreach ($db_oids as $db_oid => $db_value) {
|
|
$db_insert[$db_value] = $session[$db_oid];
|
|
}
|
|
$db_insert['device_id'] = $device['device_id'];
|
|
$db_insert['mac_addr'] = $clean_mac;
|
|
$db_insert['uptime'] = timeticks_to_sec($session['trpzClSessClientSessTimeStamp']); // FIXME. There timestamp, not timetick!
|
|
$db_insert['timestamp'] = $timestamp;
|
|
if ($session['trpzClSessClientSessRadioNum'] == "radio-1") {
|
|
$radio_number = '1';
|
|
} elseif ($session['trpzClSessClientSessradioNum'] == "radio-2") {
|
|
$radio_number = '2';
|
|
}
|
|
|
|
$db_insert['radio_id'] = $radios_sorted_db[$session['trpzClSessClientSessApNum']][$radio_number]['wifi_radio_id'];
|
|
if (OBS_DEBUG > 1) {
|
|
print_vars($db_insert);
|
|
}
|
|
if (!is_array($sessions_db[$new_index])) //If new session
|
|
{
|
|
$session_id = dbInsert($db_insert, 'wifi_sessions');
|
|
echo('+');
|
|
} elseif (array_diff($db_insert, $sessions_db[$new_index])) {
|
|
$updated = dbUpdate($db_insert, 'wifi_sessions', '`mac_addr` = ? AND `device_id` = ?', [$new_index, $device['device_id']]);
|
|
echo("U");
|
|
} else {
|
|
echo(".");
|
|
}
|
|
|
|
// XXX can add trending of link quality and bandwidth per MAC addr with trpzClSessClientSessionStatisticsTable
|
|
// XXX No delete so we can see when a user was connected the last time, might be interesting to have a "deleted" boolean to know if he is still online
|
|
}
|
|
|
|
///FIXME. Clean/delete old sessions from DB
|
|
|
|
unset($oids, $oid, $sessions_array, $sessions_db, $db_insert);
|
|
|
|
// EOF
|