From 6379fb4af5a0b9cf5cc53c8f55e8ae170a0b895b Mon Sep 17 00:00:00 2001 From: Laura Nguyen Date: Tue, 17 Aug 2021 17:00:52 -0400 Subject: [PATCH] Created Debian mirror status checker --- main.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 219f98f..12a2c5c 100644 --- a/main.py +++ b/main.py @@ -7,17 +7,24 @@ This mirror status checker determines whether CSC mirror is up-to-date with upst from datetime import datetime, timedelta import requests +CSC_MIRROR = "http://mirror.csclub.uwaterloo.ca/" SUCCESS = "Success: {} up-to-date" FAILURE = "Failure: {} out-of-sync" ERROR = "Error: {}\n{}" +def get_debian_dt(trace_file_url): + """Get Debian datetime object from trace file""" + response_text = requests.get(trace_file_url).text + time_str = response_text.split('\n')[0] + return datetime.strptime(time_str, "%a %b %d %H:%M:%S UTC %Y") + if __name__ == "__main__": # Arch try: arch_json = requests.get("https://archlinux.org/mirrors/status/json/").json() last_check_str = arch_json["last_check"] last_sync_str = [url for url in arch_json["urls"] if url["url"] == \ - "http://mirror.csclub.uwaterloo.ca/archlinux/"][0]["last_sync"] + f"{CSC_MIRROR}archlinux/"][0]["last_sync"] last_check_dt = datetime.strptime(last_check_str, "%Y-%m-%dT%H:%M:%S.%fZ") last_sync_dt = datetime.strptime(last_sync_str, "%Y-%m-%dT%H:%M:%SZ") # According to https://archlinux.org/mirrors/status/: @@ -26,3 +33,14 @@ if __name__ == "__main__": print(OUTPUT.format("Arch")) except requests.exceptions.RequestException as err: print(ERROR.format("Arch", err)) + + # Debian + try: + official_dt = get_debian_dt("https://ftp-master.debian.org/debian/project/trace/master") + csc_dt = get_debian_dt(f"{CSC_MIRROR}debian/project/trace/master") + # Keep the table cell at https://mirror-master.debian.org/status/mirror-status.html + # green and not yellow + OUTPUT = SUCCESS if official_dt < csc_dt + timedelta(hours = 7) else FAILURE + print(OUTPUT.format("Debian")) + except requests.exceptions.RequestException as err: + print(ERROR.format("Debian", err))