ansible/roles/nagios_client/files/scripts/check_supybot_plugin

112 lines
2.9 KiB
Text
Raw Normal View History

2020-10-05 15:17:25 +01:00
#!/usr/bin/python
""" check_supybot_plugin -- ensure that a plugin is loaded by supybot.
2020-10-05 15:17:25 +01:00
Run like:
2020-10-05 15:17:25 +01:00
check_supybot_plugin --target fedmsg
check_supybot_plugin --target koji --debug
2020-10-05 15:17:25 +01:00
"""
2020-10-05 15:17:25 +01:00
from __future__ import print_function
from builtins import str
from builtins import map
import argparse
import sys
import socket
import string
import uuid
2020-10-05 15:17:25 +01:00
def process_args():
parser = argparse.ArgumentParser()
parser.add_argument(
'-t', '--target', default=None, dest='target',
help="Required. The plugin we're looking for."
)
parser.add_argument(
'-n', '--nick', default=None, dest='nick',
help="NICK to use when connecting to freenode.",
)
parser.add_argument(
'-d', '--debug', default=False, action='store_true',
help='Print out debug information.', dest='debug',
)
parser.add_argument(
'-H', '--host', default='irc.freenode.net',
help='Host to connect to.', dest='host',
)
parser.add_argument(
'-p', '--port', default=6667, type=int,
help='Host to connect to.', dest='port',
)
return parser.parse_args()
2020-10-05 15:17:25 +01:00
args = process_args()
2020-10-05 15:17:25 +01:00
# Use a random nick so people can't mess with us
if not args.nick:
args.nick = 'nrpe-' + str(uuid.uuid4()).split('-')[0]
2020-10-05 15:17:25 +01:00
name = "NRPE Bot"
readbuffer = ""
2020-10-05 15:17:25 +01:00
if not args.target:
2020-10-05 15:17:25 +01:00
print("UNKNOWN: No 'target' specified.")
sys.exit(3)
2020-10-05 15:17:25 +01:00
args.target = args.target.lower()
2020-10-05 15:17:25 +01:00
if args.debug:
2020-10-05 15:17:25 +01:00
print("connecting to %s/%i" % (args.host, args.port))
try:
s = socket.socket()
s.connect((args.host, args.port))
2020-10-05 15:17:25 +01:00
if args.debug:
2020-10-05 15:17:25 +01:00
print("as %s/%s (%s)" % (args.nick, args.nick, name))
s.send(("nick %s\r\n" % args.nick).encode())
s.send(("USER %s %s bla :%s\r\n" % (args.nick, args.host, name)).encode())
while 1:
2020-10-05 15:17:25 +01:00
readbuffer = readbuffer+s.recv(1024).decode()
temp = readbuffer.split("\n")
readbuffer = temp.pop()
2020-10-05 15:17:25 +01:00
for line in temp:
line = line.rstrip()
2020-10-05 15:17:25 +01:00
if args.debug:
2020-10-05 15:17:25 +01:00
print(" * ", line)
line = line.split()
2020-10-05 15:17:25 +01:00
if line[1] == 'MODE':
2020-10-05 15:17:25 +01:00
msg = "privmsg zodbot :list\r\n".encode()
if args.debug:
2020-10-05 15:17:25 +01:00
print("sending:")
print(" ->", msg)
s.send(msg)
2020-10-05 15:17:25 +01:00
if line[0] == ':zodbot!supybot@fedora/bot/zodbot':
if args.debug:
2020-10-05 15:17:25 +01:00
print("Got our response..")
plugins = list(map(str.lower, ' '.join(line[3:][1:]).split(', ')))
if args.target in plugins:
2020-10-05 15:17:25 +01:00
print("OK")
s.send("QUIT".encode())
sys.exit(0)
else:
2020-10-05 15:17:25 +01:00
print("CRITICAL: %r not loaded by supybot" % args.target)
s.send("QUIT".encode())
sys.exit(2)
except Exception as e:
2020-10-05 15:17:25 +01:00
print("UNKNOWN: ", str(e))
if args.debug:
raise
sys.exit(3)