mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
* Extract DiscoveryItem and move some things to better places. Extract model class Fix up model construction. I have problem with construction... Makeshift model working. Switch constructor to factory. discover() and create() Support legacy discovery. Remove uneeded custom pollers Remove netonix custom detection as we try ucd on all os now. Add a few yaml procs. Fix a couple things. More processor discovery conversions Move Calix e7 to standard hrProcessorLoad, but it doesn't fully implement the HR-MIB, move things around to make it work. Add a few yaml procs. Fix a couple things. Correct some stupid mib stuff. Move more, drop php 5.3 Add netscaler which uses string indexes. Port fiberhome to yaml and use skip_values More conversions. BroadcomProcessorUsage Trait Serveriron and Ironware share some mibs. Create a common abstract os for them. Add yaml support for mib specification in each data entry Make legacy discover_processor() set 0 for hrDeviceIndex Untangle Dell switch OS processors Use use shared OS for groups if they don't have a specific group. fix silly mib mistake Make index optional Move HR and UCD to Traits and out of Processor. * forgot to update the fortiswitch index * Make sgos and avaya-ers match the old index. * fix comware test data * fix merge errors * fix dsm and remove pointless empty modules * file not found exception is in the wrong place. * Updated processor development docs
325 lines
10 KiB
PHP
325 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* WirelessSensor.php
|
|
*
|
|
* Wireless Sensors
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* @package LibreNMS
|
|
* @link http://librenms.org
|
|
* @copyright 2017 Tony Murray
|
|
* @author Tony Murray <murraytony@gmail.com>
|
|
*/
|
|
|
|
namespace LibreNMS\Device;
|
|
|
|
use LibreNMS\OS;
|
|
|
|
class WirelessSensor extends Sensor
|
|
{
|
|
protected static $name = 'Wireless Sensor';
|
|
protected static $table = 'wireless_sensors';
|
|
protected static $data_name = 'wireless-sensor';
|
|
|
|
private $access_point_ip;
|
|
|
|
/**
|
|
* Sensor constructor. Create a new sensor to be discovered.
|
|
*
|
|
* @param string $type Class of this sensor, must be a supported class
|
|
* @param int $device_id the device_id of the device that owns this sensor
|
|
* @param array|string $oids an array or single oid that contains the data for this sensor
|
|
* @param string $subtype the type of sensor an additional identifier to separate out sensors of the same class, generally this is the os name
|
|
* @param int|string $index the index of this sensor, must be stable, generally the index of the oid
|
|
* @param string $description A user visible description of this sensor, may be truncated in some places (like graphs)
|
|
* @param int|float $current The current value of this sensor, will seed the db and may be used to guess limits
|
|
* @param int $multiplier a number to multiply the value(s) by
|
|
* @param int $divisor a number to divide the value(s) by
|
|
* @param string $aggregator an operation to combine multiple numbers. Supported: sum, avg
|
|
* @param int $access_point_id The id of the AP in the access_points sensor this belongs to (generally used for controllers)
|
|
* @param int|float $high_limit Alerting: Maximum value
|
|
* @param int|float $low_limit Alerting: Minimum value
|
|
* @param int|float $high_warn Alerting: High warning value
|
|
* @param int|float $low_warn Alerting: Low warning value
|
|
* @param int|float $entPhysicalIndex The entPhysicalIndex this sensor is associated, often a port
|
|
* @param int|float $entPhysicalMeasured the table to look for the entPhysicalIndex, for example 'ports' (maybe unused)
|
|
*/
|
|
public function __construct(
|
|
$type,
|
|
$device_id,
|
|
$oids,
|
|
$subtype,
|
|
$index,
|
|
$description,
|
|
$current = null,
|
|
$multiplier = 1,
|
|
$divisor = 1,
|
|
$aggregator = 'sum',
|
|
$access_point_id = null,
|
|
$high_limit = null,
|
|
$low_limit = null,
|
|
$high_warn = null,
|
|
$low_warn = null,
|
|
$entPhysicalIndex = null,
|
|
$entPhysicalMeasured = null
|
|
) {
|
|
$this->access_point_ip = $access_point_id;
|
|
parent::__construct(
|
|
$type,
|
|
$device_id,
|
|
$oids,
|
|
$subtype,
|
|
$index,
|
|
$description,
|
|
$current,
|
|
$multiplier,
|
|
$divisor,
|
|
$aggregator,
|
|
$high_limit,
|
|
$low_limit,
|
|
$high_warn,
|
|
$low_warn,
|
|
$entPhysicalIndex,
|
|
$entPhysicalMeasured
|
|
);
|
|
}
|
|
|
|
protected function toArray()
|
|
{
|
|
$sensor = parent::toArray();
|
|
$sensor['access_point_id'] = $this->access_point_ip;
|
|
return $sensor;
|
|
}
|
|
|
|
public static function runDiscovery(OS $os)
|
|
{
|
|
foreach (self::getTypes() as $type => $descr) {
|
|
static::discoverType($os, $type);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return a list of valid types with metadata about each type
|
|
* $class => array(
|
|
* 'short' - short text for this class
|
|
* 'long' - long text for this class
|
|
* 'unit' - units used by this class 'dBm' for example
|
|
* 'icon' - font awesome icon used by this class
|
|
* )
|
|
* @param bool $valid filter this list by valid types in the database
|
|
* @param int $device_id when filtering, only return types valid for this device_id
|
|
* @return array
|
|
*/
|
|
public static function getTypes($valid = false, $device_id = null)
|
|
{
|
|
// Add new types here
|
|
// FIXME I'm really bad with icons, someone please help!
|
|
static $types = array(
|
|
'ap-count' => array(
|
|
'short' => 'APs',
|
|
'long' => 'AP Count',
|
|
'unit' => '',
|
|
'icon' => 'wifi',
|
|
),
|
|
'clients' => array(
|
|
'short' => 'Clients',
|
|
'long' => 'Client Count',
|
|
'unit' => '',
|
|
'icon' => 'tablet',
|
|
),
|
|
'quality' => array(
|
|
'short' => 'Quality',
|
|
'long' => 'Quality',
|
|
'unit' => '%',
|
|
'icon' => 'feed',
|
|
),
|
|
'capacity' => array(
|
|
'short' => 'Capacity',
|
|
'long' => 'Capacity',
|
|
'unit' => '%',
|
|
'icon' => 'feed',
|
|
),
|
|
'utilization' => array(
|
|
'short' => 'Utilization',
|
|
'long' => 'utilization',
|
|
'unit' => '%',
|
|
'icon' => 'percent',
|
|
),
|
|
'rate' => array(
|
|
'short' => 'Rate',
|
|
'long' => 'TX/RX Rate',
|
|
'unit' => 'bps',
|
|
'icon' => 'tachometer',
|
|
),
|
|
'ccq' => array(
|
|
'short' => 'CCQ',
|
|
'long' => 'Client Connection Quality',
|
|
'unit' => '%',
|
|
'icon' => 'wifi',
|
|
),
|
|
'snr' => array(
|
|
'short' => 'SNR',
|
|
'long' => 'Signal-to-Noise Ratio',
|
|
'unit' => 'dB',
|
|
'icon' => 'signal',
|
|
),
|
|
'ssr' => array(
|
|
'short' => 'SSR',
|
|
'long' => 'Signal Strength Ratio',
|
|
'unit' => 'dB',
|
|
'icon' => 'signal',
|
|
),
|
|
'mse' => array(
|
|
'short' => 'MSE',
|
|
'long' => 'Mean Square Error',
|
|
'unit' => 'dB',
|
|
'icon' => 'signal',
|
|
),
|
|
'rssi' => array(
|
|
'short' => 'RSSI',
|
|
'long' => 'Received Signal Strength Indicator',
|
|
'unit' => 'dBm',
|
|
'icon' => 'signal',
|
|
),
|
|
'power' => array(
|
|
'short' => 'Power/Signal',
|
|
'long' => 'TX/RX Power or Signal',
|
|
'unit' => 'dBm',
|
|
'icon' => 'bolt',
|
|
),
|
|
'noise-floor' => array(
|
|
'short' => 'Noise Floor',
|
|
'long' => 'Noise Floor',
|
|
'unit' => 'dBm/Hz',
|
|
'icon' => 'signal',
|
|
),
|
|
'error-ratio' => array(
|
|
'short' => 'Error Ratio',
|
|
'long' => 'Bit/Packet Error Ratio',
|
|
'unit' => '%',
|
|
'icon' => 'exclamation-triangle',
|
|
),
|
|
'error-rate' => array(
|
|
'short' => 'BER',
|
|
'long' => 'Bit Error Rate',
|
|
'unit' => 'bps',
|
|
'icon' => 'exclamation-triangle',
|
|
),
|
|
'frequency' => array(
|
|
'short' => 'Frequency',
|
|
'long' => 'Frequency',
|
|
'unit' => 'MHz',
|
|
'icon' => 'line-chart',
|
|
),
|
|
'distance' => array(
|
|
'short' => 'Distance',
|
|
'long' => 'Distance',
|
|
'unit' => 'km',
|
|
'icon' => 'space-shuttle',
|
|
),
|
|
);
|
|
|
|
if ($valid) {
|
|
$sql = 'SELECT `sensor_class` FROM `wireless_sensors`';
|
|
$params = array();
|
|
if (isset($device_id)) {
|
|
$sql .= ' WHERE `device_id`=?';
|
|
$params[] = $device_id;
|
|
}
|
|
$sql .= ' GROUP BY `sensor_class`';
|
|
|
|
$sensors = dbFetchColumn($sql, $params);
|
|
return array_intersect_key($types, array_flip($sensors));
|
|
}
|
|
|
|
return $types;
|
|
}
|
|
|
|
protected static function getDiscoveryInterface($type)
|
|
{
|
|
return str_to_class($type, 'LibreNMS\\Interfaces\\Discovery\\Sensors\\Wireless') . 'Discovery';
|
|
}
|
|
|
|
protected static function getDiscoveryMethod($type)
|
|
{
|
|
return 'discoverWireless' . str_to_class($type);
|
|
}
|
|
|
|
protected static function getPollingInterface($type)
|
|
{
|
|
return str_to_class($type, 'LibreNMS\\Interfaces\\Polling\\Sensors\\Wireless') . 'Polling';
|
|
}
|
|
|
|
protected static function getPollingMethod($type)
|
|
{
|
|
return 'pollWireless' . str_to_class($type);
|
|
}
|
|
|
|
/**
|
|
* Convert a WiFi channel to a Frequency in MHz
|
|
*
|
|
* @param $channel
|
|
* @return int
|
|
*/
|
|
public static function channelToFrequency($channel)
|
|
{
|
|
$channels = array(
|
|
1 => 2412,
|
|
2 => 2417,
|
|
3 => 2422,
|
|
4 => 2427,
|
|
5 => 2432,
|
|
6 => 2437,
|
|
7 => 2442,
|
|
8 => 2447,
|
|
9 => 2452,
|
|
10 => 2457,
|
|
11 => 2462,
|
|
12 => 2467,
|
|
13 => 2472,
|
|
14 => 2484,
|
|
34 => 5170,
|
|
36 => 5180,
|
|
38 => 5190,
|
|
40 => 5200,
|
|
42 => 5210,
|
|
44 => 5220,
|
|
46 => 5230,
|
|
48 => 5240,
|
|
52 => 5260,
|
|
56 => 5280,
|
|
60 => 5300,
|
|
64 => 5320,
|
|
100 => 5500,
|
|
104 => 5520,
|
|
108 => 5540,
|
|
112 => 5560,
|
|
116 => 5580,
|
|
120 => 5600,
|
|
124 => 5620,
|
|
128 => 5640,
|
|
132 => 5660,
|
|
136 => 5680,
|
|
140 => 5700,
|
|
149 => 5745,
|
|
153 => 5765,
|
|
157 => 5785,
|
|
161 => 5805,
|
|
);
|
|
|
|
return $channels[$channel];
|
|
}
|
|
}
|