add check_openwrt_clients
This commit is contained in:
parent
1d1e7a486c
commit
5176f7c390
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
|
||||
import paramiko
|
||||
|
||||
from checker import nagios
|
||||
from checker.result import quit_check
|
||||
from checker.types import try_int, try_float
|
||||
|
||||
WIFI_2 = list(range(1, 12))
|
||||
WIFI_5 = list(range(32, 178))
|
||||
|
||||
|
||||
def main(args):
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
|
||||
try:
|
||||
ssh.connect(args.host, username='root')
|
||||
except paramiko.ssh_exception.AuthenticationException:
|
||||
quit_check(
|
||||
f'SSH authentication to root@{args.host} failed! Make sure your key exists on the remote system or copy it over with ssh-copy-id',
|
||||
nagios.STATE_UNKNOWN)
|
||||
sys.exit(nagios.STATE_UNKNOWN)
|
||||
except paramiko.ssh_exception.NoValidConnectionsError:
|
||||
quit_check(f'SSH connection failed to {args.host}', nagios.STATE_UNKNOWN)
|
||||
|
||||
stdin, stdout, stderr = ssh.exec_command(f'iwinfo {args.interface} assoclist')
|
||||
if stdout.channel.recv_exit_status() != 0:
|
||||
quit_check(f'command failed:\nSTDOUT: {"".join(stdout.readlines())}\nSTDERR: {"".join(stderr.readlines())}',
|
||||
nagios.STATE_UNKNOWN)
|
||||
output = [str(x).strip('\n').strip(' ') for x in stdout.readlines()]
|
||||
|
||||
connected_clients = 0
|
||||
for line in output:
|
||||
is_header_line = bool(
|
||||
re.search(r'^[\t\s\n]', line) is None and len(line) and 'No station connected' not in line
|
||||
)
|
||||
if is_header_line:
|
||||
connected_clients += 1
|
||||
|
||||
perfdata = {
|
||||
'connected_clients': {'value': connected_clients, 'min': 0},
|
||||
}
|
||||
|
||||
quit_check(
|
||||
f"{connected_clients} connected clients on {args.interface}",
|
||||
nagios.STATE_OK,
|
||||
perfdata=perfdata)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--host', required=True, help='The host to SSH into.')
|
||||
parser.add_argument('--interface', required=True, help='The wireless interface to use (example: `wlan0`).')
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
main(args)
|
||||
except Exception as e:
|
||||
print(f'UNKNOWN - exception "{e}"')
|
||||
traceback.print_exc()
|
||||
sys.exit(nagios.STATE_UNKNOWN)
|
Loading…
Reference in New Issue