Added unit translations for common mib units

This commit is contained in:
Ryan Armstrong 2016-08-17 16:18:18 +08:00
parent 318aaeae32
commit 20bfdd8a70
2 changed files with 50 additions and 8 deletions

View file

@ -54,8 +54,7 @@ tree in a SNMP MIB file.
### Installation ### Installation
The following packages satisfy the runtime requirements of the script on the Install from GitHub:
associated operating systems:
# install prerequisites on Ubuntu: # install prerequisites on Ubuntu:
apt-get install perl libxml-simple-perl libsnmp-perl apt-get install perl libxml-simple-perl libsnmp-perl

View file

@ -73,7 +73,7 @@ http://www.webnms.com/snmp/help/snmpapi/snmpv3/table_handling/snmptables_basics.
=cut =cut
use strict; use strict;
use warnings; #use warnings;
use Cwd 'abs_path'; use Cwd 'abs_path';
use Data::Dumper; use Data::Dumper;
@ -405,7 +405,43 @@ sub node_to_item {
$item->{ name } = $node->{ label }; $item->{ name } = $node->{ label };
$item->{ snmp_oid } = $node->{ objectID }; $item->{ snmp_oid } = $node->{ objectID };
if ($node->{ units }) { if ($node->{ units }) {
$item->{ units } = $node->{ units }; # Convert unit to Zabbix postfix
# See 'Units' section of https://www.zabbix.com/documentation/3.0/manual/config/items/item
if ($node->{ units } =~ /^seconds$/) {
$item->{ units } = 's';
} elsif ($node->{ units } =~ /^(hundreds of seconds)$/i) {
$item->{ units } = 's';
$item->{ multiplier } = '1';
$item->{ formula } = '100';
} elsif ($node->{ units } =~ /^(milliseconds|milli-seconds)$/i) {
$item->{ units } = 's';
$item->{ multiplier } = '1';
$item->{ formula } = '.001';
} elsif ($node->{ units } =~ /^microseconds$/i) {
$item->{ units } = 's';
$item->{ multiplier } = '1';
$item->{ formula } = '.000001';
} elsif ($node->{ units } =~ /^(octets|bytes)$/i) {
$item->{ units } = 'B';
} elsif ($node->{ units } =~ /^(k-octets|kbytes|kb)$/i) {
$item->{ units } = 'B';
$item->{ multiplier } = '1';
$item->{ formula } = '.001';
} elsif ($node->{ units } =~ /^(bits per second)$/i) {
$item->{ units } = 'b';
} elsif ($node->{ units } =~ /^(kbps|kilobits per second)$/i) {
$item->{ units } = 'b';
$item->{ multiplier } = '1';
$item->{ formula } = '.001';
} elsif ($node->{ units } =~ /^percent$/i) {
$item->{ units } = '%';
} elsif ($node->{ units } =~ /\/s$/i) {
# truncate /s (/sec will be added later)
$item->{ units } = substr($node->{ units }, 0, -2) . "/sec";
} else {
# default to original
$item->{ units } = $node->{ units };
}
} }
# Merge in item defaults # Merge in item defaults
@ -425,10 +461,17 @@ sub node_to_item {
} }
} }
# Set storage type # Set storage type to Delta for MIB counter types
if ( $node->{ type } ~~ ['COUNTER', 'COUNTER32', 'COUNTER64']) { if ( $node->{ type } ~~ ['COUNTER', 'COUNTER32', 'COUNTER64']) {
$item->{ delta } = ZBX_ITEM_STORE_SPEED; $item->{ delta } = ZBX_ITEM_STORE_SPEED;
$item->{ units } .= '/sec';
if ($item->{ units } =~ /^s$/) {
$item->{ units } = '/sec';
} elsif ($item->{ units } =~ /^b$/i) {
$item->{ units } .= 'ps';
} else {
$item->{ units } .= '/sec';
}
} }
# Translate SNMP Ticks # Translate SNMP Ticks