aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWojciech Kosior <kwojtus@protonmail.com>2020-06-15 17:10:04 +0200
committerWojciech Kosior <kwojtus@protonmail.com>2020-06-15 17:10:04 +0200
commitf44dc8feb115c531636b8796af27a3f9a6909ca5 (patch)
treeca5ce335dcf69bb32f76b9f3b2d5a8b980642752 /src
parent76bd5cf7b3771864ed54e42aadc5fee57826d32d (diff)
download0tdns-f44dc8feb115c531636b8796af27a3f9a6909ca5.tar.gz
0tdns-f44dc8feb115c531636b8796af27a3f9a6909ca5.zip
appripriately log vpn connection failures
Diffstat (limited to 'src')
-rwxr-xr-xsrc/hourly.py36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/hourly.py b/src/hourly.py
index 155113e..1fd223d 100755
--- a/src/hourly.py
+++ b/src/hourly.py
@@ -71,17 +71,27 @@ with open("/var/log/0tdns.log", "w") as logfile:
connection.close()
parallel_vpns = ztdns_config['parallel_vpns']
- vpn_wrapper_pids = set()
-
+ pids_vpns = {} # map each wrapper pid to id of the vpn it connects to
+
+ def wait_for_wrapper_process():
+ while True:
+ pid, exit_status = waitpid(0, 0)
+ # make sure
+ if pids_vpns.get(pid) is not None:
+ break
+ if exit_status == 2:
+ # this means our perform_queries.py crashed... not good
+ logfile.write('performing queries through vpn {} failed\n'\
+ .format(pids_vpns[pid]))
+ elif exit_status != 0:
+ # vpn server is probably not responding
+ logfile.write('connection to vpn {} failed\n'\
+ .format(pids_vpns[pid]))
+ pids_vpns.pop(pid)
+
for vpn_id, config_hash in vpns:
- if len(vpn_wrapper_pids) == parallel_vpns:
- while True:
- pid, exit_status = waitpid(0, 0)
- if pid in vpn_wrapper_pids:
- break
- if exit_status != 0:
- logfile.write("one of vpn connections failed")
- vpn_wrapper_pids.remove(pid)
+ if len(pids_vpns) == parallel_vpns:
+ wait_for_wrapper_process()
config_path = "/var/lib/0tdns/{}.ovpn".format(config_hash)
physical_ip = get_default_host_address(ztdns_config['host'])
@@ -92,7 +102,7 @@ with open("/var/log/0tdns.log", "w") as logfile:
p = subprocess.Popen([wrapper, config_path, physical_ip,
route_through_veth] + command_in_namespace)
- vpn_wrapper_pids.add(p.pid)
+ pids_vpns[p.pid] = vpn_id
- for pid in vpn_wrapper_pids:
- waitpid(pid, 0)
+ while len(pids_vpns) > 0:
+ wait_for_wrapper_process()