From c1e9f7ab592a07a139c1293d8bd7f62ea7ea7a53 Mon Sep 17 00:00:00 2001 From: mantaohuang Date: Sun, 2 Aug 2020 00:17:22 -0400 Subject: [PATCH] manager consider whether ovpn interface is up --- o_manager.py | 2 +- openvpn.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/o_manager.py b/o_manager.py index c290b75..1eb480d 100644 --- a/o_manager.py +++ b/o_manager.py @@ -284,7 +284,7 @@ class OManager: # n_down = 2 weights = [] for i in self.instances: - if i["op"].status != RUNNING: + if i["op"].status != RUNNING or (not i["op"].interface_up): i["weight"] = 0 weights.append(i["weight"]) continue diff --git a/openvpn.py b/openvpn.py index bde971a..2c07705 100644 --- a/openvpn.py +++ b/openvpn.py @@ -78,6 +78,7 @@ class Openvpn: self.loop = loop else: self.loop = asyncio.get_event_loop() + self.interface_up = False self.load_cfg(ovpn_config, env_config) def load_cfg(self, ovpn_config, env_config): @@ -223,6 +224,7 @@ class Openvpn: for task in self.run_task: task.cancel() self.run_task = [] + self.interface_up = False if clear_folder: self.clear_folder() @@ -275,8 +277,11 @@ class Openvpn: """ io_count = psutil.net_io_counters(pernic=True) if self.interface not in io_count: + self.interface_up = False logging.debug(f"interface {self.interface} is not ready.") return + + self.monitor_interval = True io_count = io_count[self.interface] open(self.io_stat_fp, "a").write( f"{datetime.utcnow().timestamp()},{io_count.bytes_recv},{io_count.bytes_sent}\n")