The following script can be used for nagios to contact the mirrolist servers and query the age of the pickle currently loaded. This output of the script looks like this: $./check_mirrorlist_pkl_age.py 02 3000 5000 WARN: mirrorlist data on proxy02 older than 3000s (3894s) $ ./check_mirrorlist_pkl_age.py 14 5000 7000 OK: up-to-date mirrorlist data on proxy14 (3921s) $ ./check_mirrorlist_pkl_age.py 08 2000 3000 CRIT: mirrorlist data on proxy08 older than 3000s (3938s) Signed-off-by: Adrian Reber <adrian@xxxxxxxx> --- .../nagios/plugins/check_mirrorlist_pkl_age.py | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 roles/nagios_server/files/nagios/plugins/check_mirrorlist_pkl_age.py diff --git a/roles/nagios_server/files/nagios/plugins/check_mirrorlist_pkl_age.py b/roles/nagios_server/files/nagios/plugins/check_mirrorlist_pkl_age.py new file mode 100755 index 000000000..2aa5bb2ca --- /dev/null +++ b/roles/nagios_server/files/nagios/plugins/check_mirrorlist_pkl_age.py @@ -0,0 +1,96 @@ +#!/usr/bin/python3 +# +# Script to check the age of the data used by the mirrorlist servers. +# +# Fedora's mirrorlist server are using a python pkl which has the creation +# date embedded. Querying the mirrorlist interface with '&time' returns +# that timestamp: +# +# '# database creation time: <timestamp>' +# +# This script connects to the specified proxy and reads out that value +# and compares it with a warning and critical threshold. +# +# Tested with python2 and python3 +# +# Requires python[2,3]-requests +# +# Usage: +# check_mirrorlist_pkl_age.py <proxy-number> <warning> <critical> +# check_mirrorlist_pkl_age.py 12 3600 7200 +# +# Author: Adrian Reber <adrian@xxxxxxxx> + +import requests +import sys +import time +import datetime + +if len(sys.argv) != 4: + print("Usage:") + print(" %s needs 3 parameters\n" % sys.argv[0]) + print(" %s <proxy-number> <warning> <critical>" % sys.argv[0]) + print(" %s 12 3600 7200" % sys.argv[0]) + sys.exit(3) + +proxy = sys.argv[1] +warn = int(sys.argv[2]) +crit = int(sys.argv[3]) + +check_url = 'http://proxy%s.fedoraproject.org/' % proxy +check_url += 'mirrorlist?repo=fedora-rawhide&arch=x86_64&time' + +headers = {'Host': 'mirrors.fedoraproject.org'} + +try: + r = requests.get(check_url, headers=headers) +except: + print('CRIT: getting data from proxy%s failed' % proxy) + sys.exit(2) + + +if r.status_code != 200: + print('CRIT: unexpected response (not 200) from proxy%s' % proxy) + sys.exit(2) + +for line in r.iter_lines(): + if b'database creation time' not in line: + continue + + ts = 0 + now = 0 + try: + time_from_proxy = line.decode().split(': ')[1:][0] + ts = datetime.datetime.strptime( + time_from_proxy, + '%Y-%m-%d %H:%M:%S.%f' + ) + ts = int(time.mktime(ts.timetuple())) + + now = datetime.datetime.utcnow() + now = int(time.mktime(now.timetuple())) + + except: + print('CRIT: failure parsing result from proxy%s' % proxy) + sys.exit(2) + + if (len == 0) or (now == 0): + print('CRIT: failure parsing result from proxy%s' % proxy) + sys.exit(2) + + age = int(now - ts) + + if age > crit: + print( + 'CRIT: mirrorlist data on proxy%s older than %ds (%ds)' % + (proxy, crit, age)) + sys.exit(2) + + if age > warn: + print( + 'WARN: mirrorlist data on proxy%s older than %ds (%ds)' % + (proxy, warn, age)) + sys.exit(1) + + print('OK: up-to-date mirrorlist data on proxy%s (%ds)' % (proxy, age)) + sys.exit(0) -- 2.14.3 _______________________________________________ infrastructure mailing list -- infrastructure@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to infrastructure-leave@xxxxxxxxxxxxxxxxxxxxxxx