From 7bfe0bc831ed730ed5186764617a5607a3015391 Mon Sep 17 00:00:00 2001 From: Spencer Butler Date: Wed, 27 Mar 2019 15:38:35 -0500 Subject: [PATCH] Added support for HikVision-DS Cameras (#9980) * Added support for HikVision-DS Cameras clean up removed pointless file, cleaned up code fixed failing unit tests, a bit of cleanup WIP - will rebase split hikvision into hikvision-nvr an hikvision-cam * removed unneeded comment and rec file --- .../definitions/discovery/hikvision-cam.yaml | 8 + includes/definitions/hikvision-cam.yaml | 14 + includes/definitions/hikvision-nvr.yaml | 14 + includes/definitions/hikvision.yaml | 8 - .../discovery/mempools/hikvision-cam.inc.php | 34 ++ .../discovery/mempools/hikvision-nvr.inc.php | 34 ++ .../discovery/storage/hikvision-cam.inc.php | 36 ++ .../discovery/storage/hikvision-nvr.inc.php | 36 ++ includes/polling/os/hikvision-cam.inc.php | 10 + includes/polling/os/hikvision-nvr.inc.php | 10 + includes/polling/os/hikvision.inc.php | 4 - mibs/hikvision/HIK-DEVICE-MIB | 285 ++++++++++++++++ mibs/hikvision/HIKVISION-MIB | 319 ++++++++++++++++++ tests/data/hikvision-cam.json | 101 ++++++ tests/data/hikvision-nvr.json | 63 ++++ tests/snmpsim/hikvision-cam.snmprec | 9 + tests/snmpsim/hikvision-nvr.snmprec | 14 + 17 files changed, 987 insertions(+), 12 deletions(-) create mode 100644 includes/definitions/discovery/hikvision-cam.yaml create mode 100644 includes/definitions/hikvision-cam.yaml create mode 100644 includes/definitions/hikvision-nvr.yaml delete mode 100644 includes/definitions/hikvision.yaml create mode 100644 includes/discovery/mempools/hikvision-cam.inc.php create mode 100644 includes/discovery/mempools/hikvision-nvr.inc.php create mode 100644 includes/discovery/storage/hikvision-cam.inc.php create mode 100644 includes/discovery/storage/hikvision-nvr.inc.php create mode 100644 includes/polling/os/hikvision-cam.inc.php create mode 100644 includes/polling/os/hikvision-nvr.inc.php delete mode 100644 includes/polling/os/hikvision.inc.php create mode 100644 mibs/hikvision/HIK-DEVICE-MIB create mode 100644 mibs/hikvision/HIKVISION-MIB create mode 100644 tests/data/hikvision-cam.json create mode 100644 tests/data/hikvision-nvr.json create mode 100644 tests/snmpsim/hikvision-cam.snmprec create mode 100644 tests/snmpsim/hikvision-nvr.snmprec diff --git a/includes/definitions/discovery/hikvision-cam.yaml b/includes/definitions/discovery/hikvision-cam.yaml new file mode 100644 index 0000000000..a8ae90c425 --- /dev/null +++ b/includes/definitions/discovery/hikvision-cam.yaml @@ -0,0 +1,8 @@ +mib: HIK-DEVICE-MIB:HIKVISION-MIB +modules: + processors: + data: + - + oid: cpuPercent + num_oid: '.1.3.6.1.4.1.39165.1.7.{{ $index }}' + index: 0 diff --git a/includes/definitions/hikvision-cam.yaml b/includes/definitions/hikvision-cam.yaml new file mode 100644 index 0000000000..2d04ccd078 --- /dev/null +++ b/includes/definitions/hikvision-cam.yaml @@ -0,0 +1,14 @@ +os: hikvision-cam +text: 'Hikvision Camera' +type: network +icon: hikvision +mib_dir: + - hikvision +over: + - { graph: device_processor, text: 'CPU Usage' } + - { graph: device_mempool, text: 'Memory Usage' } +discovery: + - snmpget: + oid: .1.3.6.1.4.1.39165.1.1.0 + op: starts + value: 'DS-' diff --git a/includes/definitions/hikvision-nvr.yaml b/includes/definitions/hikvision-nvr.yaml new file mode 100644 index 0000000000..a400522114 --- /dev/null +++ b/includes/definitions/hikvision-nvr.yaml @@ -0,0 +1,14 @@ +os: hikvision-nvr +text: 'Hikvision NVR' +type: network +icon: hikvision +mib_dir: + - hikvision +over: + - { graph: device_mempool, text: 'Memory Usage' } + - { graph: device_uptime, text: 'Device Uptime' } +discovery: + - sysObjectID: + - .1.3.6.1.4.1.50001 + - sysDescr: + - 'Hikvision company products' diff --git a/includes/definitions/hikvision.yaml b/includes/definitions/hikvision.yaml deleted file mode 100644 index 7b6a5936bd..0000000000 --- a/includes/definitions/hikvision.yaml +++ /dev/null @@ -1,8 +0,0 @@ -os: hikvision -text: Hikvision -type: network -icon: hikvision -over: - - { graph: device_uptime, text: 'Device Uptime' } -discovery: - - sysObjectID: .1.3.6.1.4.1.50001 diff --git a/includes/discovery/mempools/hikvision-cam.inc.php b/includes/discovery/mempools/hikvision-cam.inc.php new file mode 100644 index 0000000000..2678633d8f --- /dev/null +++ b/includes/discovery/mempools/hikvision-cam.inc.php @@ -0,0 +1,34 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 Spencer Butler + * @author Spencer Butler + */ + +if ($device['os'] === 'hikvision-cam') { + echo 'hikvision-cam:'; + + $index = 0; + $type = 'hikvision-cam'; + $descr = 'Memory'; + $precision = '1'; + discover_mempool($valid_mempool, $device, $index, $type, $descr, $precision, null, null); +} diff --git a/includes/discovery/mempools/hikvision-nvr.inc.php b/includes/discovery/mempools/hikvision-nvr.inc.php new file mode 100644 index 0000000000..a7510bb5d1 --- /dev/null +++ b/includes/discovery/mempools/hikvision-nvr.inc.php @@ -0,0 +1,34 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 Spencer Butler + * @author Spencer Butler + */ + +if ($device['os'] === 'hikvision-nvr') { + echo 'hikvision-nvr:'; + + $index = 0; + $type = 'hikvision-nvr'; + $descr = 'Memory'; + $precision = '1'; + discover_mempool($valid_mempool, $device, $index, $type, $descr, $precision, null, null); +} diff --git a/includes/discovery/storage/hikvision-cam.inc.php b/includes/discovery/storage/hikvision-cam.inc.php new file mode 100644 index 0000000000..ae6cc97f32 --- /dev/null +++ b/includes/discovery/storage/hikvision-cam.inc.php @@ -0,0 +1,36 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 Spencer Butler + * @author Spencer Butler + */ + +if ($device['os'] === 'hikvision-cam') { + echo 'hikvision-cam:'; + + $size = snmp_get($device, 'diskSize.0', '-Ovq', 'HIK-DEVICE-MIB'); + $used = snmp_get($device, 'diskPercent.0', '-Ovq', 'HIK-DEVICE-MIB'); + $index = 0; + $fstype = 'hikvision-cam'; + $mib = 'HIK-DEVICE-MIB'; + $descr = 'Storage'; + discover_storage($valid_storage, $device, $index, $fstype, $mib, $descr, $size, null, $used); +} diff --git a/includes/discovery/storage/hikvision-nvr.inc.php b/includes/discovery/storage/hikvision-nvr.inc.php new file mode 100644 index 0000000000..431c1e2951 --- /dev/null +++ b/includes/discovery/storage/hikvision-nvr.inc.php @@ -0,0 +1,36 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 Spencer Butler + * @author Spencer Butler + */ + +if ($device['os'] === 'hikvision-nvr') { + echo 'hikvision-nvr:'; + + $size = snmp_get($device, 'hikDiskCapability.1.0', '-Ovq', 'HIKVISION-MIB'); + $free = snmp_get($device, 'hikDiskFreeSpace.1.0', '-Ovq', 'HIKVISION-MIB'); + $index = 0; + $type = 'hikvision-nvr'; + $descr = 'Storage'; + $mib = 'HIKVISION-MIB'; + discover_storage($valid_storage, $device, $index, $type, $mib, $descr, 0, size, null); +} diff --git a/includes/polling/os/hikvision-cam.inc.php b/includes/polling/os/hikvision-cam.inc.php new file mode 100644 index 0000000000..030f266c55 --- /dev/null +++ b/includes/polling/os/hikvision-cam.inc.php @@ -0,0 +1,10 @@ +", + "sysObjectID": ".1.3.6.1.4.1.50001", + "sysDescr": "Hikvision company products", + "sysContact": null, + "version": null, + "hardware": null, + "features": null, + "os": "hikvision-nvr", + "type": "network", + "serial": null, + "icon": "hikvision.png", + "location": null + } + ] + }, + "poller": { + "devices": [ + { + "sysName": "", + "sysObjectID": ".1.3.6.1.4.1.50001", + "sysDescr": "Hikvision company products", + "sysContact": "", + "version": "200", + "hardware": "NVR", + "features": null, + "os": "hikvision-nvr", + "type": "network", + "serial": "0820160719AARR624053979WCVU", + "icon": "hikvision.png", + "location": "" + } + ] + } + }, + "mempools": { + "discovery": { + "mempools": [ + { + "mempool_index": "0", + "entPhysicalIndex": null, + "hrDeviceIndex": null, + "mempool_type": "hikvision-nvr", + "mempool_precision": 1, + "mempool_descr": "Memory", + "mempool_perc": 0, + "mempool_used": 0, + "mempool_free": 0, + "mempool_total": 0, + "mempool_largestfree": null, + "mempool_lowestfree": null, + "mempool_deleted": 0, + "mempool_perc_warn": 75 + } + ] + }, + "poller": "matches discovery" + } +} diff --git a/tests/snmpsim/hikvision-cam.snmprec b/tests/snmpsim/hikvision-cam.snmprec new file mode 100644 index 0000000000..fd4bac5896 --- /dev/null +++ b/tests/snmpsim/hikvision-cam.snmprec @@ -0,0 +1,9 @@ +1.3.6.1.4.1.39165.1.1.0|4|DS-2CD2185FWD-I +1.3.6.1.4.1.39165.1.3.0|4|V5.5.3 build 171025 +1.3.6.1.4.1.39165.1.7.0|4|15 PERCENT +1.3.6.1.4.1.39165.1.8.0|4|0.0 GB +1.3.6.1.4.1.39165.1.9.0|4|0 PERCENT +1.3.6.1.4.1.39165.1.10.0|4|512 MB +1.3.6.1.4.1.39165.1.11.0|4|83 PERCENT +1.3.6.1.4.1.39165.1.21.0|4|H.264 +1.3.6.1.4.1.39165.1.22.0|4|MJPEG diff --git a/tests/snmpsim/hikvision-nvr.snmprec b/tests/snmpsim/hikvision-nvr.snmprec new file mode 100644 index 0000000000..9bc384c693 --- /dev/null +++ b/tests/snmpsim/hikvision-nvr.snmprec @@ -0,0 +1,14 @@ +1.3.6.1.2.1.1.1.0|4|Hikvision company products +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.50001 +1.3.6.1.2.1.1.3.0|67|85447143 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4| +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.4.1.50001.1.1.0|64|192.168.80.94 +1.3.6.1.4.1.50001.1.3.0|4|0820160719AARR624053979WCVU +1.3.6.1.4.1.50001.1.100.0|2|2 +1.3.6.1.4.1.50001.1.101.0|2|200 +1.3.6.1.4.1.50001.1.220.0|2|169 +1.3.6.1.4.1.50001.1.221.0|2|5 +1.3.6.1.4.1.50001.1.241.1.4.1.0|2|2715648 +1.3.6.1.4.1.50001.1.241.1.5.1.0|2|3815447