From 5b203904db2b71eba444080d4cbb3d9074e4f91f Mon Sep 17 00:00:00 2001 From: PlexSheep Date: Mon, 22 May 2023 14:57:31 +0200 Subject: [PATCH] basic functionality --- README.md | 2 +- requirements.txt | 0 src/__init__.py | 0 src/main.py | 39 +++++++++++++++++++++++++++++++++++++++ src/moninet.service | 15 +++++++++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 requirements.txt create mode 100644 src/__init__.py create mode 100644 src/main.py create mode 100644 src/moninet.service diff --git a/README.md b/README.md index 2dec95a..372d503 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # moninet -monitor over time for internet outages \ No newline at end of file +monitor your network for internet outages diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..f2cd205 --- /dev/null +++ b/src/main.py @@ -0,0 +1,39 @@ +import http.client +from time import sleep +import datetime +from socket import socket + +TIMEOUT: float = 1 +TESTDOMAINS: list[str] = ["cscherr.de", "debian.org", "cloudflare.com"] + +def check_net() -> bool: + overall: bool = True + for domain in TESTDOMAINS: + status, msg = reachable(domain) + overall &= status + print(f"{domain:60s} {msg}") + + return overall + +def reachable(domain: str) -> tuple[bool, str]: + try: + conn = http.client.HTTPSConnection(domain, timeout=TIMEOUT) + conn.request("GET", "/") + r = conn.getresponse() + conn.close() + return True, r.status + except Exception as e: + return False, e.__str__() + +def monitor(): + while True: + try: + b = check_net() + if b: print(":SUCCESS:") + else: print(":FAILURE:") + sleep(4) + except Exception as e: + print(e) + +if __name__ == "__main__": + monitor() diff --git a/src/moninet.service b/src/moninet.service new file mode 100644 index 0000000..a88a413 --- /dev/null +++ b/src/moninet.service @@ -0,0 +1,15 @@ +[Unit] +Description=Monitor network for internet outage +After=syslog.target + +[Service] +Type=simple +User=moninet +Group=moninet +WorkingDirectory=/srv/moninet +ExecStart=/srv/moninet/.venv/bin/python3 -u /srv/moninet/src/main.py +StandardOutput=syslog +StandardError=syslog + +[Install] +WantedBy=multi-user.target