From fb4589a69614eaa36d45ebb8b69b83d2cdf3b263 Mon Sep 17 00:00:00 2001 From: marcsello Date: Wed, 17 Nov 2021 19:31:43 +0100 Subject: [PATCH] Initial commit --- .gitignore | 7 ++++++ Dockerfile | 11 ++++++++++ reporter.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 ++ 4 files changed, 77 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 reporter.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bedaace --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.swp +venv/* +*.pyc +__pycache__/* +__pycache__ +*.wpr +.idea/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1c2ee03 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.9-slim + +ADD requirements.txt /app/ +WORKDIR /app/ + +RUN pip3 install -r requirements.txt + +ADD app.py /app/ + +EXPOSE 8000 +CMD ["gunicorn", "-b", "0.0.0.0:8000", "app:app"] \ No newline at end of file diff --git a/reporter.py b/reporter.py new file mode 100644 index 0000000..f2f8ede --- /dev/null +++ b/reporter.py @@ -0,0 +1,57 @@ +import os +import time +import requests +from urllib.parse import urljoin +from apscheduler.schedulers.blocking import BlockingScheduler + + +def run_report_task(hostname: str, test_urls: list, report_urls:list): + for test_url in test_urls: + + start_time = time.time() + try: + r = requests.get(test_url, timeout=10) + except requests.exceptions.Timeout: + print(test_url, "Timed out") + continue + else: + latency_s = time.time() - start_time + + if r.status_code != 204: + print(test_url, "Wrong response") + continue + + report = { + "client": hostname, + "cloud": test_url, + "measurements": { + "latency": latency_s * 1000 + } + } + + for report_url in report_urls: + r = requests.post(report_url, json=report) + + if r.status_code != 201: + print(report_url, "Wrong response") + continue + + +def main(): + test_urls = os.environ.get("TEST_URLS", "").split(';') + report_urls = os.environ.get("REPORT_URLS", "").split(';') + frequency = float(os.environ.get("FREQUENCY", 15)) + + if (not test_urls) or (not report_urls): + print("No urls defined") + return + + hostname = os.environ['HOSTNAME'] + + scheduler = BlockingScheduler() + scheduler.add_job(lambda: run_report_task(hostname, test_urls, report_urls), trigger='interval', seconds=frequency) + scheduler.start() + + +if __name__ == '__main__': + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7b8e46b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +requests +apscheduler \ No newline at end of file