Added threading to cron and foreground execution mode

This commit is contained in:
Johannes Findeisen 2021-12-27 16:55:54 +01:00
commit 6d0ef7b137
3 changed files with 16 additions and 12 deletions

View file

@ -1,12 +1,12 @@
{ {
"interval": 60, "interval": 60,
"database_type": "mariadb",
"database": "uplink", "database": "uplink",
"database_host": "127.0.0.1", "database_host": "127.0.0.1",
"database_user": "USER", "database_user": "USER",
"database_password": "PASSWORD", "database_password": "PASSWORD",
"cron": false, "mode": "cron",
"daemon": false, "log_level": "ERROR",
"log_level": "",
"uplinks": [ "uplinks": [
{ "provider": "Cable Provider", "ip": "192.168.0.1", "password": "1234" }, { "provider": "Cable Provider", "ip": "192.168.0.1", "password": "1234" },
{ "provider": "DSL Provider", "ip": "192.168.1.1", "password": "1234" } { "provider": "DSL Provider", "ip": "192.168.1.1", "password": "1234" }

View file

@ -27,10 +27,11 @@ import json
import sys import sys
import time import time
from threading import Thread
from uplink.uplink import Uplink from uplink.uplink import Uplink
# Version format: MAJOR.FEATURE.FIXES # Version format: MAJOR.FEATURE.FIXES
__version__ = "0.4.1-development" __version__ = "0.4.2-development"
# TODO: CHECK ALL ERROR HANDLING!!! # TODO: CHECK ALL ERROR HANDLING!!!
# TODO: Implement logging # TODO: Implement logging
@ -43,7 +44,8 @@ __version__ = "0.4.1-development"
def parse_args(): def parse_args():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="uplink is a tool to monitor the link status of AVM FRITZ!Box Cable and DSL based routers.", description="uplink is a tool to monitor the link status of AVM FRITZ!Box Cable and DSL "
"based routers.",
epilog="uplink is not some program expecting uplinks to work!", epilog="uplink is not some program expecting uplinks to work!",
prog="uplink") prog="uplink")
@ -59,8 +61,9 @@ def parse_args():
mode.add_argument("-f", "--foreground", default=False, dest="foreground", action="store_true", mode.add_argument("-f", "--foreground", default=False, dest="foreground", action="store_true",
help="run looped in foreground (default: false)") help="run looped in foreground (default: false)")
parser.add_argument("-i", "--interval", type=int, help="poll interval in seconds. this overrides config file " parser.add_argument("-i", "--interval", type=int, help="poll interval in seconds. this "
"settings. (default: 60)") "overrides config file settings. "
"(default: 60)")
""" """
parser.add_argument("-b", "--database", metavar="DATABASE", help="database to use") parser.add_argument("-b", "--database", metavar="DATABASE", help="database to use")
@ -112,7 +115,7 @@ if __name__ == "__main__":
config = json.loads(config_data) config = json.loads(config_data)
except Exception as err: except Exception as err:
# TODO: Replace all lines like this with generic Python logging # TODO: Replace all lines like this with generic Python logging
print(str("Uplink: Configuration Error!" + str(err))) print(str("uplink: Configuration Error! " + str(err)))
sys.exit(1) sys.exit(1)
try: try:
@ -129,14 +132,15 @@ if __name__ == "__main__":
if args.cron: if args.cron:
for i in range(len(config["uplinks"])): for i in range(len(config["uplinks"])):
uplink.get_data(config, i) t = Thread(target=uplink.get_data, args=(config, i))
t.start()
elif args.daemon: elif args.daemon:
uplink.start() uplink.start()
elif args.foreground: elif args.foreground:
while True: while True:
for i in range(len(config["uplinks"])): for i in range(len(config["uplinks"])):
uplink.get_data(config, i) t = Thread(target=uplink.get_data, args=(config, i))
# TODO: print data formatted to STDOUT t.start()
try: try:
time.sleep(config["interval"]) time.sleep(config["interval"])
except KeyboardInterrupt as err: except KeyboardInterrupt as err:

View file

@ -85,7 +85,7 @@ class Uplink(Daemon):
status = "DOWN" status = "DOWN"
# TODO: Replace all lines like this with generic Python logging # TODO: Replace all lines like this with generic Python logging
print(str("[" + str(d) + " " + str(t) + "] " +config["uplinks"][inc]["provider"] + " " + status)) print(str("[" + str(d) + " " + str(t) + "] " + config["uplinks"][inc]["provider"] + " " + status))
# TODO: Fix to long lines and make the SQL statement more readable # TODO: Fix to long lines and make the SQL statement more readable
sql = 'INSERT INTO log (timestamp, date, time, uptime, internal_ip, external_ip, external_ipv6, is_linked, ' \ sql = 'INSERT INTO log (timestamp, date, time, uptime, internal_ip, external_ip, external_ipv6, is_linked, ' \