#!/usr/bin/env python
import sys
import re
import requests
koji_host = sys.argv[1]
try:
koji_pkg = sys.argv[2]
except IndexError:
koji_pkg = 'koji'
NAGIOS = {
'OK': 0,
'WARN': 1,
'CRIT': 2
}
TARGETS = {
'web': 'https://%s/koji/' % koji_host,
'hub': 'https://%s/kojihub/' % koji_host,
'pkg': 'https://%s/packages/%s/' % (koji_host, koji_pkg)
}
def do_request(url, method='GET', headers=None, body=None):
try:
res = getattr(requests, method.lower())(url, headers=headers, data=body)
except requests.exceptions.ConnectionError as e:
return (500, e.message)
return (res.status_code, res.text)
def check_web():
url = TARGETS['web']
(status_code, data) = do_request(url)
if status_code != 200:
return (NAGIOS['CRIT'], 'Unable to access "%s"' % url)
if not re.search(r'
', data):
return (NAGIOS['WARN'], 'Unable to match content from "%s"' % url)
return (NAGIOS['OK'], '')
def check_hub(method='system.listMethods'):
url = TARGETS['hub']
xmlrpc = '''
%s
''' % method
headers = {
'Content-Type': 'text/xml'
}
(status_code, data) = do_request(url, method='POST', headers=headers, body=xmlrpc)
if status_code != 200:
return (NAGIOS['CRIT'], 'Unable to access "%s"' % url)
if len(re.findall(r'[a-zA-Z0-9\._]+', data)) == 0:
return (NAGIOS['WARN'], 'Unable to parse content from "%s"' % url)
return (NAGIOS['OK'], None)
def check_pkg():
url = TARGETS['pkg']
(status_code, data) = do_request(url)
if status_code != 200:
return (NAGIOS['CRIT'], 'Unable to access "%s"' % url)
if len(re.findall(r'
[0-9.\/]+', data)) == 0:
return (NAGIOS['WARN'], 'Unable to match content from "%s"' % url)
return (NAGIOS['OK'], None)
def main():
ok = NAGIOS['OK']
for (code, msg) in (check_web(), check_hub(), check_pkg()):
if code != ok:
return (code, msg)
return (ok, None)
if __name__ == '__main__':
(code, reason) = main()
if code != NAGIOS['OK']:
sys.stderr.write('%s\n' % reason)
else:
sys.stdout.write('All checks passed.\n')
sys.exit(code)