From e7a907c77c8fb34e33080426b2a9e83defc0f823 Mon Sep 17 00:00:00 2001 From: Dmitrii M Date: Sat, 10 Dec 2022 15:36:24 +0400 Subject: [PATCH] init --- .env.example | 7 +++++++ main.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 .env.example create mode 100644 main.py diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..21d6ada --- /dev/null +++ b/.env.example @@ -0,0 +1,7 @@ +DOWNLOAD_ENDPOINT="https://example.com/api/push/DEADBEEF00?status=up&msg=OK&ping=" +UPLOAD_ENDPOINT="https://example.com/api/push/BOOBA88888?status=up&msg=OK&ping=" +PING_ENDPOINT="https://example.com/api/push/arbitrary1?status=up&msg=OK&ping=" +DOWNLOAD_THRESHOLD=10 +UPLOAD_THRESHOLD=10 +PING_THRESHOLD=100 +INTERVAL_SEC=3000 diff --git a/main.py b/main.py new file mode 100644 index 0000000..7c3b4b3 --- /dev/null +++ b/main.py @@ -0,0 +1,52 @@ +import logging +from json import loads +from subprocess import run + +from dotenv import dotenv_values +from requests import get + + +def dl_ul_handler(value: float, threshold: float): + return (value / 1000000, value > threshold) + + +def ping_handler(value: float, threshold: float): + return (value, value < threshold) + + +VALUES_AND_HANDLERS = { + "download": dl_ul_handler, + "upload": dl_ul_handler, + "ping": ping_handler, +} + + +def main(): + logging.info("Starting speedtest") + speedtest_process = run(["speedtest-cli", "--json"], capture_output=True) + results = loads(speedtest_process.stdout) + logging.info("Speedtest results: %s", results) + config = dotenv_values(".env") + for value, handler in VALUES_AND_HANDLERS.items(): + url = config.get(f"{value.upper()}_ENDPOINT") + threshold = config.get(f"{value.upper()}_THRESHOLD") + if not (url and threshold): + logging.error("Please specify %s endpoint and threshold", value) + return + url = url.split("?")[0] + processed_value, status = handler( + float(results.get(value, 0)), float(threshold) + ) + url = f"{url}?status={'up' if status else 'down'}&ping={processed_value:.2f}" + request = get(url) + logging.debug(request.url) + if request.status_code == 200: + logging.info("Speedtest results pushed") + else: + logging.error("Something went wrong") + logging.error(request.status_code) + logging.error(request.text) + + +if __name__ == "__main__": + main()