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 <adr...@lisas.de>
---
 .../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 <adr...@lisas.de>
+
+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@lists.fedoraproject.org
To unsubscribe send an email to infrastructure-le...@lists.fedoraproject.org

Reply via email to