def main(): """Plugin: check_admin_up_oper_down.""" argparser = SnmpArguments(description) argparser.parser.add_argument('-w', action='store_true', help='Return Warning if interfaces are down') argparser.parser.add_argument('-c', action='store_true', help='Return Critical if interfaces are down') args = argparser.parser.parse_nelmon_args() if args.c: exit_status = C.CRITICAL elif args.w: exit_status = C.WARNING else: nelmon_exit(C.UNKNOWN, 'Use -w or -c') snmp = NelmonSnmp(args) oidlist = [] oidlist.append(O.ifAdminStatus) oidlist.append(O.ifOperStatus) var_table = snmp.getnext(*oidlist) admin_up = [] oper_down = [] for var_binds in var_table: for oid, value in var_binds: if O.ifAdminStatus in oid and value == 1: ifIndex = int(oid.rsplit('.', 1)[-1]) admin_up.append(ifIndex) if O.ifOperStatus in oid and value == 2: ifIndex = int(oid.rsplit('.', 1)[-1]) oper_down.append(ifIndex) down_interfaces = list(set(admin_up) & set(oper_down)) if len(down_interfaces) == 0: nelmon_exit(C.OK, 'No interfaces down') oidlist = [] interface_descr = {} interface_alias = {} for ifIndex in down_interfaces: oidlist.append(O.ifDescr + "." + str(ifIndex)) oidlist.append(O.ifAlias + "." + str(ifIndex)) var_binds = snmp.get(*oidlist) for oid, value in var_binds: if O.ifDescr in oid: ifIndex = int(oid.rsplit('.', 1)[-1]) interface_descr[ifIndex] = value if O.ifAlias in oid: ifIndex = int(oid.rsplit('.', 1)[-1]) interface_alias[ifIndex] = value return_string = [] if len(down_interfaces) > 1: return_string.append("%d interfaces down" % (len(down_interfaces))) for ifIndex in down_interfaces: if len(str(interface_alias[ifIndex])) > 0: return_string.append(str(interface_descr[ifIndex]) + " - " + str(interface_alias[ifIndex])) else: return_string.append(str(interface_descr[ifIndex])) nelmon_exit(exit_status, return_string)
def main(): """Plugin: check_admin_up_oper_down.""" argparser = SnmpArguments(description) argparser.parser.add_argument('-w', action='store_true', help='Return Warning if interfaces are down') argparser.parser.add_argument( '-c', action='store_true', help='Return Critical if interfaces are down') args = argparser.parser.parse_nelmon_args() if args.c: exit_status = C.CRITICAL elif args.w: exit_status = C.WARNING else: nelmon_exit(C.UNKNOWN, 'Use -w or -c') snmp = NelmonSnmp(args) oidlist = [] oidlist.append(O.ifAdminStatus) oidlist.append(O.ifOperStatus) var_table = snmp.getnext(*oidlist) admin_up = [] oper_down = [] for var_binds in var_table: for oid, value in var_binds: if O.ifAdminStatus in oid and value == 1: ifIndex = int(oid.rsplit('.', 1)[-1]) admin_up.append(ifIndex) if O.ifOperStatus in oid and value == 2: ifIndex = int(oid.rsplit('.', 1)[-1]) oper_down.append(ifIndex) down_interfaces = list(set(admin_up) & set(oper_down)) if len(down_interfaces) == 0: nelmon_exit(C.OK, 'No interfaces down') oidlist = [] interface_descr = {} interface_alias = {} for ifIndex in down_interfaces: oidlist.append(O.ifDescr + "." + str(ifIndex)) oidlist.append(O.ifAlias + "." + str(ifIndex)) var_binds = snmp.get(*oidlist) for oid, value in var_binds: if O.ifDescr in oid: ifIndex = int(oid.rsplit('.', 1)[-1]) interface_descr[ifIndex] = value if O.ifAlias in oid: ifIndex = int(oid.rsplit('.', 1)[-1]) interface_alias[ifIndex] = value return_string = [] if len(down_interfaces) > 1: return_string.append("%d interfaces down" % (len(down_interfaces))) for ifIndex in down_interfaces: if len(str(interface_alias[ifIndex])) > 0: return_string.append( str(interface_descr[ifIndex]) + " - " + str(interface_alias[ifIndex])) else: return_string.append(str(interface_descr[ifIndex])) nelmon_exit(exit_status, return_string)
def main(): """Plugin: check_admin_up_oper_down.""" argparser = SnmpArguments(description) argparser.parser.add_argument('-w', action='store_true', help='Return Warning if interfaces are down') argparser.parser.add_argument( '-c', action='store_true', help='Return Critical if interfaces are down') argparser.parser.add_argument( '-d', '--descr', dest='ifdescr_arg', default=None, const=None, help='Search over Interface descr with regex' 'example: GigabitEthernet(\d+)/0/(4[78]|[5][0-2])' 'matches any of: GigabitEthernetx/0/47,48,50,51,52') argparser.parser.add_argument( '-al', '--alias', dest='ifalias_arg', default=None, const=None, help='Search over Interface alias with regex' 'example: UPLINK' 'matches any interfaces with keyword UPLINK on its alias') argparser.parser.add_argument( '-id', '--ignore_descr', dest='ifdescr_ignore_arg', default=None, const=None, help='Search over Interface ifDescr with regex and ignores that' 'example: Stack') args = argparser.parser.parse_nelmon_args() if args.c: exit_status = C.CRITICAL elif args.w: exit_status = C.WARNING else: nelmon_exit(C.UNKNOWN, 'Use -w or -c') ifdescr_arg = args.ifdescr_arg ifalias_arg = args.ifalias_arg ifdescr_ignore_arg = args.ifdescr_ignore_arg snmp = NelmonSnmp(args) oidlist = [] oidlist.append(O.ifAdminStatus) oidlist.append(O.ifOperStatus) var_table = snmp.getnext(*oidlist) admin_up = [] oper_down = [] for var_binds in var_table: for oid, value in var_binds: if O.ifAdminStatus in oid and value == 1: ifIndex = int(oid.rsplit('.', 1)[-1]) admin_up.append(ifIndex) if O.ifOperStatus in oid and value == 2: ifIndex = int(oid.rsplit('.', 1)[-1]) oper_down.append(ifIndex) down_interfaces = list(set(admin_up) & set(oper_down)) if len(down_interfaces) == 0: nelmon_exit(C.OK, 'No interfaces down') oidlist = [] interface_descr = {} interface_alias = {} for ifIndex in down_interfaces: oidlist.append(O.ifDescr + "." + str(ifIndex)) oidlist.append(O.ifAlias + "." + str(ifIndex)) var_binds = snmp.get(*oidlist) for oid, value in var_binds: if O.ifDescr in oid: ifIndex = int(oid.rsplit('.', 1)[-1]) interface_descr[ifIndex] = value if O.ifAlias in oid: ifIndex = int(oid.rsplit('.', 1)[-1]) interface_alias[ifIndex] = value return_string = [] # Change the down_interfaces only to those that ifDescr matches regex passed to ifdescr_arg if ifdescr_arg: down_interfaces = [] for ifIndex, ifDescr in interface_descr.items(): # Add the regex from -d command, like: GigabitEthernet(\d+)/0/(4[78]|[5][0-2]) ifdescr_regex = re.compile(ifdescr_arg) # Only add to down_interfaces if regex matches if ifdescr_regex.search(ifDescr): down_interfaces.append(ifIndex) # Change the down_interfaces only to those that ifAlias matches regex passed to ifalias_arg if ifalias_arg: down_interfaces = [] if interface_alias: for ifIndex, ifAlias in interface_alias.items(): # Add the regex from -al command, like: UPLINK ifalias_regex = re.compile(ifalias_arg) # Only add to down_interfaces if regex matches if ifalias_regex.search(ifAlias): down_interfaces.append(ifIndex) # Change the down_interfaces only to those that ifDescr doesn't match regex passed to ifdescr_ignore_arg if ifdescr_ignore_arg: for ifIndex, ifDescr in interface_descr.items(): # Add the regex from --id command, like: GigabitEthernet(\d+)/0/(4[78]|[5][0-2]) or Stack ifdescr_regex = re.compile(ifdescr_ignore_arg) # Remove from down_interfaces if regex matches if ifdescr_regex.search(ifDescr): down_interfaces.remove(ifIndex) if len(down_interfaces) > 0: return_string.append("%d interfaces down" % (len(down_interfaces))) else: nelmon_exit(C.OK, 'No interfaces down') for ifIndex in down_interfaces: if len(str(interface_alias[ifIndex])) > 0: return_string.append( str(interface_descr[ifIndex]) + " - " + str(interface_alias[ifIndex])) else: return_string.append(str(interface_descr[ifIndex])) nelmon_exit(exit_status, return_string)