newdevice: Support Avtech RoomAlert 32E/W and RoomAlert 11E (#7614)

* newdevice: support Avtech RoomAlert 32E/W
Move avtech discovery to yaml, took a bit of trickery

* More flexibility when checking pre-cached data
A little cleanup

* Add support for RoomAlert 32E/W external and wish temp sensors
Add RoomAlert 11E support (just temp sensors)
Updated ROOMALERT32E-MIB
This commit is contained in:
Tony Murray 2017-11-04 16:25:13 -05:00 committed by Neil Lathwood
parent 5b42044d04
commit 3dba5cd39d
9 changed files with 473 additions and 1083 deletions

View File

@ -0,0 +1,188 @@
modules:
sensors:
temperature:
options:
divisor: 100
skip_values: 0
data:
- # RoomAlert 3E internal
oid: .1.3.6.1.4.1.20916.1.9.1.1.1.1.0
num_oid: .1.3.6.1.4.1.20916.1.9.1.1.1.1.
index: 0
descr: .1.3.6.1.4.1.20916.1.9.1.1.1.3.0
- # RoomAlert 3E sen1
oid: .1.3.6.1.4.1.20916.1.9.1.1.2.1.0
num_oid: .1.3.6.1.4.1.20916.1.9.1.1.2.1.
index: 1
descr: .1.3.6.1.4.1.20916.1.9.1.1.2.6.0
- # RoomAlert 4E internal
oid: .1.3.6.1.4.1.20916.1.6.1.1.1.2.0
num_oid: .1.3.6.1.4.1.20916.1.6.1.1.1.2.
divisor: 1
index: 0
descr: .1.3.6.1.4.1.20916.1.6.1.1.2.1.0
- # RoomAlert 4E sen1
oid: .1.3.6.1.4.1.20916.1.6.1.2.2.1.0
num_oid: .1.3.6.1.4.1.20916.1.6.1.2.2.1.
divisor: 1
index: 1
descr: .1.3.6.1.4.1.20916.1.6.1.2.1.6.0
- # RoomAlert 4E sen2
oid: .1.3.6.1.4.1.20916.1.6.1.2.2.1.0
num_oid: .1.3.6.1.4.1.20916.1.6.1.2.2.1.
divisor: 1
index: 2
descr: .1.3.6.1.4.1.20916.1.6.1.2.2.6.0
- # RoomAlert 11E sensor 2
oid: .1.3.6.1.4.1.20916.1.3.1.2.1.0
num_oid: .1.3.6.1.4.1.20916.1.3.1.2.1.
divisor: 1
index: 2
descr: .1.3.6.1.4.1.20916.1.3.1.2.6.0
- # RoomAlert 11E sensor 3
oid: .1.3.6.1.4.1.20916.1.3.1.3.1.0
num_oid: .1.3.6.1.4.1.20916.1.3.1.3.1.
divisor: 1
index: 3
descr: .1.3.6.1.4.1.20916.1.3.1.3.6.0
- # RoomAlert 11E sensor 4
oid: .1.3.6.1.4.1.20916.1.3.1.4.1.0
num_oid: .1.3.6.1.4.1.20916.1.3.1.4.1.
divisor: 1
index: 4
descr: .1.3.6.1.4.1.20916.1.3.1.4.6.0
- # RoomAlert 32E/W internal temp
oid: .1.3.6.1.4.1.20916.1.8.1.1.1.2.0
num_oid: .1.3.6.1.4.1.20916.1.8.1.1.1.2.
index: 0
descr: Internal Temperature
- # RoomAlert 32E/W internal heat
oid: .1.3.6.1.4.1.20916.1.8.1.1.4.2.0
num_oid: .1.3.6.1.4.1.20916.1.8.1.1.4.2.
index: 1
descr: Internal Heat Index
- # RoomAlert 32E/W ext temp
oid: ra32-ext-temp
num_oid: .1.3.6.1.4.1.20916.1.8.1.2.
value: value
descr: Sensor {{ $id }}
- # RoomAlert 32W wish temp
oid: ra32-wish-temp
num_oid: .1.3.6.1.4.1.20916.1.8.1.4.
value: value
descr: WiSH {{ $id }} Internal
- # TemPageR 3E internal
oid: .1.3.6.1.4.1.20916.1.7.1.1.1.1.0
num_oid: .1.3.6.1.4.1.20916.1.7.1.1.1.1.
index: 0
descr: .1.3.6.1.4.1.20916.1.7.1.1.2.0
- # TemPageR 3E sen1
oid: .1.3.6.1.4.1.20916.1.7.1.2.1.1.0
num_oid: .1.3.6.1.4.1.20916.1.7.1.2.1.1.
index: 1
descr: .1.3.6.1.4.1.20916.1.7.1.2.1.3.0
- # TemPageR 3E sen2
oid: .1.3.6.1.4.1.20916.1.7.1.2.2.1.0
num_oid: .1.3.6.1.4.1.20916.1.7.1.2.2.1.
index: 2
descr: .1.3.6.1.4.1.20916.1.7.1.2.2.3.0
- # TemPageR 4E internal
oid: .1.3.6.1.4.1.20916.1.1.1.1.1.0
num_oid: .1.3.6.1.4.1.20916.1.1.1.1.1.
index: 0
descr: Internal
high_limit: .1.3.6.1.4.1.20916.1.1.3.1.0
low_limit: .1.3.6.1.4.1.20916.1.1.3.2.0
- # TemPageR 4E sen1
oid: .1.3.6.1.4.1.20916.1.1.1.1.2.0
num_oid: .1.3.6.1.4.1.20916.1.1.1.1.2.
index: 1
descr: Sensor 1
high_limit: .1.3.6.1.4.1.20916.1.1.3.3.0
low_limit: .1.3.6.1.4.1.20916.1.1.3.4.0
- # TemPageR 4E sen2
oid: .1.3.6.1.4.1.20916.1.1.1.1.3.0
num_oid: .1.3.6.1.4.1.20916.1.1.1.1.3.
index: 2
descr: Sensor 2
high_limit: .1.3.6.1.4.1.20916.1.1.3.5.0
low_limit: .1.3.6.1.4.1.20916.1.1.3.6.0
- # TemPageR 4E sen3
oid: .1.3.6.1.4.1.20916.1.1.1.1.4.0
num_oid: .1.3.6.1.4.1.20916.1.1.1.1.4.
index: 3
descr: Sensor 3
high_limit: .1.3.6.1.4.1.20916.1.1.3.7.0
low_limit: .1.3.6.1.4.1.20916.1.1.3.8.0
humidity:
options:
divisor: 100
data:
- # RoomAlert 32E/W
oid: .1.3.6.1.4.1.20916.1.8.1.1.2.1.0
num_oid: .1.3.6.1.4.1.20916.1.8.1.1.2.1.
index: 0
descr: Internal Humidity
voltage:
data:
- # RoomAlert 32E/W analog
oid: ra32-analog
num_oid: .1.3.6.1.4.1.20916.1.8.1.1.5.
value: value
low_limit: 0
high_limit: 5
descr: Analog {{ $id }}
state:
data:
- # RoomAlert 3E switch
oid: .1.3.6.1.4.1.20916.1.9.1.2.1.0
num_oid: .1.3.6.1.4.1.20916.1.9.1.2.1.
index: 0
descr: .1.3.6.1.4.1.20916.1.9.1.2.2.0
states:
- { value: 0, generic: -1, graph: 1, descr: Off }
- { value: 1, generic: 0, graph: 1, descr: On }
- # RoomAlert 4E switch
oid: .1.3.6.1.4.1.20916.1.6.1.3.1.0
num_oid: .1.3.6.1.4.1.20916.1.6.1.3.1.
index: 0
descr: .1.3.6.1.4.1.20916.1.6.1.3.2.0
state_name: switch
states:
- { value: 0, generic: -1, graph: 1, descr: Off }
- { value: 1, generic: 0, graph: 1, descr: On }
- # RoomAlert 32E/W power
oid: .1.3.6.1.4.1.20916.1.8.1.1.3.1.0
num_oid: .1.3.6.1.4.1.20916.1.8.1.1.3.1.
index: 0
descr: Power Source
state_name: power
states:
- { value: 0, generic: 1, graph: 1, descr: Battery }
- { value: 1, generic: 0, graph: 1, descr: AC }
- # RoomAlert 32E/W relays
oid: ra32-relay
value: value
num_oid: .1.3.6.1.4.1.20916.1.8.1.1.6.
descr: Relay {{ $id }}
state_name: relay
states:
- { value: 0, generic: 0, graph: 1, descr: Open }
- { value: 1, generic: 0, graph: 1, descr: Closed }
- # RoomAlert 32E/W switches
oid: ra32-switch
value: value
num_oid: .1.3.6.1.4.1.20916.1.8.1.3.
descr: Switch {{ $id }}
state_name: switch
states:
- { value: 0, generic: -1, graph: 1, descr: Off }
- { value: 1, generic: 0, graph: 1, descr: On }

View File

@ -805,126 +805,6 @@ function check_entity_sensor($string, $device)
return true;
}
/**
* Helper function to improve readability
* Can't use mib based polling, because the snmp implentation and mibs are terrible
*
* @param array $device device array
* @param array $sensor array(id, oid, type, descr, descr_oid, min, max, divisor)
* @param array $valid valid sensors array
* @return bool
*/
function avtech_add_sensor($device, $sensor, &$valid)
{
// set the id, must be unique
if (isset($sensor['id'])) {
$id = $sensor['id'];
} else {
d_echo('Error: No id set for this sensor' . "\n");
return false;
}
d_echo('Sensor id: ' . $id . "\n");
// set the sensor oid
if ($sensor['oid']) {
$oid = $sensor['oid'];
} else {
d_echo('Error: No oid set for this sensor' . "\n");
return false;
}
d_echo('Sensor oid: ' . $oid . "\n");
// get the type
$type = $sensor['type'] ? $sensor['type'] : 'temperature';
d_echo('Sensor type: ' . $type . "\n");
// get the sensor value
$value = snmp_get($device, $oid, '-OvQ');
// if the sensor doesn't exist abort
if ($value === false || ($type == 'temperature' && $value == 0)) {
//issue unfortunately some non-existant sensors return 0
d_echo('Error: sensor returned no data, skipping' . "\n");
return false;
}
d_echo('Sensor value: ' . $value . "\n");
$type_name = $device['os'];
if ($type == 'switch') {
// set up state sensor
$type_name .= ucfirst($type);
$type = 'state';
$state_index_id = create_state_index($type_name);
//Create State Translation
if (isset($state_index_id)) {
$states = array(
array($state_index_id,'Off',1,0,-1),
array($state_index_id,'On',1,1,0),
);
foreach ($states as $value) {
$insert = array(
'state_index_id' => $value[0],
'state_descr' => $value[1],
'state_draw_graph' => $value[2],
'state_value' => $value[3],
'state_generic_value' => $value[4]
);
dbInsert($insert, 'state_translations');
}
}
}
// set the description
if ($sensor['descr_oid']) {
$descr = trim(snmp_get($device, $sensor['descr_oid'], '-OvQ'), '"');
} elseif ($sensor['descr']) {
$descr = $sensor['descr'];
} else {
d_echo('Error: No description set for this sensor' . "\n");
return false;
}
d_echo('Sensor description: ' . $descr . "\n");
// set divisor
if ($sensor['divisor']) {
$divisor = $sensor['divisor'];
} elseif ($type == 'temperature') {
$divisor = 100;
} else {
$divisor = 1;
}
d_echo('Sensor divisor: ' . $divisor . "\n");
// set min for alarm
if ($sensor['min_oid']) {
$min = snmp_get($device, $sensor['min_oid'], '-OvQ') / $divisor;
} else {
$min = null;
}
d_echo('Sensor alarm min: ' . $min . "\n");
// set max for alarm
if ($sensor['max_oid']) {
$max = snmp_get($device, $sensor['max_oid'], '-OvQ') / $divisor;
} else {
$max = null;
}
d_echo('Sensor alarm max: ' . $max . "\n");
// add the sensor
discover_sensor($valid['sensor'], $type, $device, $oid, $id, $type_name, $descr, $divisor, '1', $min, null, null, $max, $value/$divisor);
if ($type == 'state') {
create_sensor_to_state_index($device, $type_name, $id);
}
return true;
}
/**
* Get the device divisor, account for device specific quirks
* The default divisor is 10
@ -1084,7 +964,6 @@ function discovery_process(&$valid, $device, $sensor_type, $pre_cache)
foreach ($device['dynamic_discovery']['modules']['sensors'][$sensor_type]['data'] as $data) {
$tmp_name = $data['oid'];
$raw_data = (array)$pre_cache[$tmp_name];
$cached_data = $pre_cache['__cached'] ?: array();
d_echo("Data $tmp_name: ");
d_echo($raw_data);
@ -1106,7 +985,7 @@ function discovery_process(&$valid, $device, $sensor_type, $pre_cache)
} elseif ($sensor_type === 'state') {
// translate string states to values (poller does this as well)
$states = array_column($data['states'], 'value', 'descr');
$value = isset($states[$snmp_data[$data_name]]) ? $states[$snmp_data[$data_name]] : false;
$value = isset($states[$tmp_value]) ? $states[$tmp_value] : false;
} else {
$value = false;
}
@ -1115,28 +994,26 @@ function discovery_process(&$valid, $device, $sensor_type, $pre_cache)
if (can_skip_sensor($value, $data, $sensor_options) === false && is_numeric($value)) {
$oid = $data['num_oid'] . $index;
if (isset($snmp_data[$data['descr']])) {
$descr = $snmp_data[$data['descr']];
} else {
// process the description
$descr = dynamic_discovery_get_value('descr', $index, $data, $pre_cache);
if (is_null($descr)) {
$descr = str_replace('{{ $index }}', $index, $data['descr']);
preg_match_all('/({{ [\$a-zA-Z0-9]+ }})/', $descr, $tmp_var, PREG_PATTERN_ORDER);
$tmp_vars = $tmp_var[0];
foreach ($tmp_vars as $k => $tmp_var) {
$tmp_var = preg_replace('/({{ | }}|\$)/', '', $tmp_var);
if (isset($snmp_data[$tmp_var])) {
$descr = str_replace("{{ \$$tmp_var }}", $snmp_data[$tmp_var], $descr);
}
if (isset($cached_data[$index][$tmp_var])) {
$descr = str_replace("{{ \$$tmp_var }}", $cached_data[$index][$tmp_var], $descr);
preg_match_all('/{{ \$([a-zA-Z0-9.]+) }}/', $descr, $matches);
foreach ($matches[1] as $tmp_var) {
$replace = dynamic_discovery_get_value($tmp_var, $index, $data, $pre_cache, null);
if (!is_null($replace)) {
$descr = str_replace("{{ \$$tmp_var }}", $replace, $descr);
}
}
}
$divisor = $data['divisor'] ?: ($sensor_options['divisor'] ?: 1);
$multiplier = $data['multiplier'] ?: ($sensor_options['multiplier'] ?: 1);
$low_limit = is_numeric($data['low_limit']) ? $data['low_limit'] : ($snmp_data[$data['low_limit']] ?: 'null');
$low_warn_limit = is_numeric($data['low_warn_limit']) ? $data['low_warn_limit'] : ($snmp_data[$data['low_warn_limit']] ?: 'null');
$warn_limit = is_numeric($data['warn_limit']) ? $data['warn_limit'] : ($snmp_data[$data['warn_limit']] ?: 'null');
$high_limit = is_numeric($data['high_limit']) ? $data['high_limit'] : ($snmp_data[$data['high_limit']] ?: 'null');
$low_limit = is_numeric($data['low_limit']) ? $data['low_limit'] : dynamic_discovery_get_value('low_limit', $index, $data, $pre_cache, 'null');
$low_warn_limit = is_numeric($data['low_warn_limit']) ? $data['low_warn_limit'] : dynamic_discovery_get_value('low_warn_limit', $index, $data, $pre_cache, 'null');
$warn_limit = is_numeric($data['warn_limit']) ? $data['warn_limit'] : dynamic_discovery_get_value('warn_limit', $index, $data, $pre_cache, 'null');
$high_limit = is_numeric($data['high_limit']) ? $data['high_limit'] : dynamic_discovery_get_value('high_limit', $index, $data, $pre_cache, 'null');
$sensor_name = $device['os'];
if ($sensor_type === 'state') {
@ -1163,6 +1040,41 @@ function discovery_process(&$valid, $device, $sensor_type, $pre_cache)
}
}
/**
* Helper function for dynamic discovery to search for data from pre_cached snmp data
*
* @param string $name The name of the field from the discovery data or just an oid
* @param int $index The index of the current sensor
* @param array $discovery_data The discovery data for the current sensor
* @param array $pre_cache all pre-cached snmp data
* @param mixed $default The default value to return if data is not found
* @return mixed
*/
function dynamic_discovery_get_value($name, $index, $discovery_data, $pre_cache, $default = null)
{
if (isset($discovery_data[$name])) {
$name = $discovery_data[$name];
}
if (isset($pre_cache[$discovery_data['oid']][$index][$name])) {
return $pre_cache[$discovery_data['oid']][$index][$name];
}
if (isset($pre_cache[$name])) {
if (is_array($pre_cache[$name])) {
if (count($pre_cache[$name]) === 1) {
return current($pre_cache[$name]);
} elseif (isset($pre_cache[$index][$name])) {
return $pre_cache[$index][$name];
}
} else {
return $pre_cache[$name];
}
}
return $default;
}
/**
* @param $types
* @param $device

View File

@ -12,24 +12,19 @@ if (is_file($pre_cache_file)) {
d_echo($pre_cache);
}
if (isset($device['dynamic_discovery']['modules']['sensors'])) {
// TODO change to exclude os with pre-cache php file, but just exclude them by hand for now (like avtech)
if (isset($device['dynamic_discovery']['modules']['sensors']) && $device['os'] != 'avtech') {
foreach ($device['dynamic_discovery']['modules']['sensors'] as $key => $data_array) {
foreach ($data_array['data'] as $data) {
foreach ((array)$data['oid'] as $oid) {
$tmp_name = $oid;
if (!isset($pre_cache[$tmp_name])) {
if (!isset($pre_cache[$oid])) {
if (isset($data['snmp_flags'])) {
$snmp_flag = $data['snmp_flags'];
} else {
$snmp_flag = '-OeQUs';
}
$snmp_flag .= ' -Ih';
if ($key === 'pre-cache') {
$array_data = '__cached';
} else {
$array_data = $tmp_name;
}
$pre_cache[$array_data] = snmpwalk_cache_oid($device, $oid, $pre_cache[$array_data], $device['dynamic_discovery']['mib'], null, $snmp_flag);
$pre_cache[$oid] = snmpwalk_cache_oid($device, $oid, $pre_cache[$array_data], $device['dynamic_discovery']['mib'], null, $snmp_flag);
}
}
}

View File

@ -0,0 +1,61 @@
<?php
/**
* avtech.inc.php
*
* Grab all data under avtech enterprise oid and process it for yaml consumption
*
* 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>
*/
// table name => regex (first group is index, second group is id)
$virtual_tables = array(
'ra32-analog' => '/\.1\.3\.6\.1\.4\.1\.20916\.1\.8\.1\.1\.5\.((\d+)\.0)/',
'ra32-relay' => '/\.1\.3\.6\.1\.4\.1\.20916\.1\.8\.1\.1\.6\.((\d+)\.0)/',
'ra32-ext-temp' => '/\.1\.3\.6\.1\.4\.1\.20916\.1\.8\.1\.2\.((\d+)\.1\.0)/',
'ra32-switch' => '/\.1\.3\.6\.1\.4\.1\.20916\.1\.8\.1\.3\.((\d+)\.0)/',
'ra32-wish-temp' => '/\.1\.3\.6\.1\.4\.1\.20916\.1\.8\.1\.4\.((\d+)\.4\.1\.2\.0)/',
);
$data = snmp_walk($device, '.1.3.6.1.4.1.20916.1', '-OQn');
foreach (explode(PHP_EOL, $data) as $line) {
list($oid, $value) = explode(' = ', $line);
$processed = false;
foreach ($virtual_tables as $vt_name => $vt_regex) {
if (preg_match($vt_regex, $oid, $matches)) {
$index = $matches[1];
$id = $matches[2];
$pre_cache[$vt_name][$index] = array(
'value' => $value,
'id' => $id,
);
$processed = true;
break; // skip rest
}
}
if (!$processed) {
$pre_cache[$oid] = array($value);
}
}
unset($data);

View File

@ -1,26 +0,0 @@
<?php
echo 'AVTECH: ';
if (ends_with($device['sysObjectID'], '.20916.1.9')) {
// RoomAlert 3E
$device_oid = '.1.3.6.1.4.1.20916.1.9.';
$switch = array(
'id' => 0,
'type' => 'switch',
'oid' => $device_oid.'1.2.1.0',
'descr_oid' => $device_oid.'1.2.2.0',
);
avtech_add_sensor($device, $switch, $valid);
} elseif (ends_with($device['sysObjectID'], '.20916.1.6')) {
// RoomAlert 4E
$device_oid = '.1.3.6.1.4.1.20916.1.6.';
$switch = array(
'id' => 0,
'type' => 'switch',
'oid' => $device_oid.'1.3.1.0',
'descr_oid' => $device_oid.'1.3.2.0',
);
avtech_add_sensor($device, $switch, $valid);
}

View File

@ -1,112 +0,0 @@
<?php
echo 'AVTECH: ';
if (ends_with($device['sysObjectID'], '.20916.1.7')) {
// TemPageR 3E
$device_oid = '.1.3.6.1.4.1.20916.1.7.';
$internal = array(
'id' => 0,
'oid' => $device_oid.'1.1.1.1.0',
'descr_oid' => $device_oid.'1.1.2.0',
);
avtech_add_sensor($device, $internal, $valid);
$sen1 = array(
'id' => 1,
'oid' => $device_oid.'1.2.1.1.0',
'descr_oid' => $device_oid.'1.2.1.3.0',
);
avtech_add_sensor($device, $sen1, $valid);
$sen2 = array(
'id' => 2,
'oid' => $device_oid.'1.2.2.1.0',
'descr_oid' => $device_oid.'1.2.2.3.0',
);
avtech_add_sensor($device, $sen2, $valid);
} elseif (ends_with($device['sysObjectID'], '.20916.1.9')) {
// RoomAlert 3E
$device_oid = '.1.3.6.1.4.1.20916.1.9.';
$internal = array(
'id' => 0,
'oid' => $device_oid.'1.1.1.1.0',
'descr_oid' => $device_oid.'1.1.1.3.0',
);
avtech_add_sensor($device, $internal, $valid);
$sen1 = array(
'id' => 1,
'oid' => $device_oid.'1.1.2.1.0',
'descr_oid' => $device_oid.'1.1.2.6.0',
);
avtech_add_sensor($device, $sen1, $valid);
} elseif (ends_with($device['sysObjectID'], '.20916.1.1')) {
// TemPageR 4E
$device_oid = '.1.3.6.1.4.1.20916.1.1.';
$internal = array(
'id' => 0,
'oid' => $device_oid.'1.1.1.0',
'descr' => 'Internal',
'max_oid' => $device_oid.'3.1.0',
'min_oid' => $device_oid.'3.2.0',
);
avtech_add_sensor($device, $internal, $valid);
$sen1 = array(
'id' => 1,
'oid' => $device_oid.'1.1.2.0',
'descr' => 'Sensor 1',
'max_oid' => $device_oid.'3.3.0',
'min_oid' => $device_oid.'3.4.0',
);
avtech_add_sensor($device, $sen1, $valid);
$sen2 = array(
'id' => 2,
'oid' => $device_oid.'1.1.3.0',
'descr' => 'Sensor 2',
'max_oid' => $device_oid.'3.5.0',
'min_oid' => $device_oid.'3.6.0',
);
avtech_add_sensor($device, $sen2, $valid);
$sen3 = array(
'id' => 3,
'oid' => $device_oid.'1.1.4.0',
'descr' => 'Sensor 3',
'max_oid' => $device_oid.'3.7.0',
'min_oid' => $device_oid.'3.8.0',
);
avtech_add_sensor($device, $sen3, $valid);
} elseif (ends_with($device['sysObjectID'], '.20916.1.6')) {
// RoomAlert 4E
$device_oid = '.1.3.6.1.4.1.20916.1.6.';
$divisor = 1;
$internal = array(
'id' => 0,
'oid' => $device_oid.'1.1.1.2.0',
'descr_oid' => $device_oid.'1.1.2.1.0',
'divisor' => $divisor,
);
avtech_add_sensor($device, $internal, $valid);
$sen1 = array(
'id' => 1,
'oid' => $device_oid.'1.2.2.1.0',
'descr_oid' => $device_oid.'1.2.1.6.0',
'divisor' => $divisor,
);
avtech_add_sensor($device, $sen1, $valid);
$sen2 = array(
'id' => 2,
'oid' => $device_oid.'1.2.2.1.0',
'descr_oid' => $device_oid.'1.2.2.6.0',
'divisor' => $divisor,
);
avtech_add_sensor($device, $sen2, $valid);
}

File diff suppressed because it is too large Load Diff

View File

@ -67,4 +67,41 @@ sdfsd
$this->assertSame($expected, linkify($input));
}
public function testDynamicDiscoveryGetValue()
{
$pre_cache = array(
'firstdata' => array(
0 => array('temp' => 1),
1 => array('temp'=> 2),
),
'high' => array(
0 => array('high' => 3),
1 => array('high' => 4),
),
'table' => array(
0 => array('first' => 5, 'second' => 6),
1 => array('first' => 7, 'second' => 8),
),
'single' => array('something' => 9),
'oneoff' => 10,
);
$data = array('value' => 'temp', 'oid' => 'firstdata');
$this->assertNull(dynamic_discovery_get_value('missing', 0, $data, $pre_cache));
$this->assertSame('yar', dynamic_discovery_get_value('default', 0, $data, $pre_cache, 'yar'));
$this->assertSame(2, dynamic_discovery_get_value('value', 1, $data, $pre_cache));
$data = array('oid' => 'high');
$this->assertSame(3, dynamic_discovery_get_value('high', 0, $data, $pre_cache));
$data = array('oid' => 'table');
$this->assertSame(5, dynamic_discovery_get_value('first', 0, $data, $pre_cache));
$this->assertSame(7, dynamic_discovery_get_value('first', 1, $data, $pre_cache));
$this->assertSame(6, dynamic_discovery_get_value('second', 0, $data, $pre_cache));
$this->assertSame(8, dynamic_discovery_get_value('second', 1, $data, $pre_cache));
$this->assertSame(9, dynamic_discovery_get_value('single', 0, $data, $pre_cache));
$this->assertSame(10, dynamic_discovery_get_value('oneoff', 3, $data, $pre_cache));
}
}

View File

@ -27,7 +27,7 @@ global $config;
$install_dir = realpath(__DIR__ . '/..');
$init_modules = array('web');
$init_modules = array('web', 'discovery');
if (!getenv('SNMPSIM')) {
$init_modules[] = 'mocksnmp';