From 093d426bc9edb5df684557879cc3298a3830efbb Mon Sep 17 00:00:00 2001 From: bunkerity Date: Wed, 10 Aug 2022 12:19:03 +0200 Subject: [PATCH] better management of registration with BunkerNet and fix syntax error in LinuxTest --- core/bunkernet/jobs/bunkernet-register.py | 53 +++++++++++++++-------- core/bunkernet/jobs/bunkernet.py | 4 +- core/bunkernet/plugin.json | 2 +- tests/LinuxTest.py | 2 +- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/core/bunkernet/jobs/bunkernet-register.py b/core/bunkernet/jobs/bunkernet-register.py index 04dcb03cf..a64aad919 100755 --- a/core/bunkernet/jobs/bunkernet-register.py +++ b/core/bunkernet/jobs/bunkernet-register.py @@ -32,6 +32,7 @@ try : os.makedirs("/opt/bunkerweb/cache/bunkernet", exist_ok=True) # Ask an ID if needed + bunkernet_id = None if not os.path.isfile("/opt/bunkerweb/cache/bunkernet/instance.id") : logger.log("BUNKERNET", "ℹ️", "Registering instance on BunkerNet API ...") ok, status, data = register() @@ -47,31 +48,47 @@ try : elif data["result"] != "ok" : logger.log("BUNKERNET", "❌", "Received error from BunkerNet API while sending register request : " + data["data"]) os._exit(1) - with open("/opt/bunkerweb/cache/bunkernet/instance.id", "w") as f : - f.write(data["data"]) + bunkernet_id = data["data"] logger.log("BUNKERNET", "ℹ️", "Successfully registered on BunkerNet API with instance id " + get_id()) else : + with open("/opt/bunkerweb/cache/bunkernet/instance.id", "r") as f : + bunkernet_id = f.read() logger.log("BUNKERNET", "ℹ️", "Already registered on BunkerNet API with instance id " + get_id()) # Ping logger.log("BUNKERNET", "ℹ️", "Checking connectivity with BunkerNet API ...") - ok, status, data = ping() - if not ok : - logger.log("BUNKERNET", "❌", "Error while sending ping request to BunkerNet API : " + data) - os._exit(2) - elif status == 429 : - logger.log("BUNKERNET", "⚠️", "BunkerNet API is rate limiting us, trying again later...") - os._exit(0) - elif status == 401 : - logger.log("BUNKERNET", "⚠️", "Instance ID is not registered, removing it and retrying a register later...") - os.remove("/opt/bunkerweb/cache/bunkernet/instance.id") - os._exit(1) - elif data["result"] != "ok" : - logger.log("BUNKERNET", "❌", "Received error from BunkerNet API while sending ping request : " + data["data"] + ", removing instance ID") - os._exit(1) - logger.log("BUNKERNET", "ℹ️", "Successfully checked connectivity with BunkerNet API") + bunkernet_ping = False + for i in range(0, 5) : + ok, status, data = ping(bunkernet_id) + retry = False + if not ok : + logger.log("BUNKERNET", "❌", "Error while sending ping request to BunkerNet API : " + data) + retry = True + elif status == 429 : + logger.log("BUNKERNET", "⚠️", "BunkerNet API is rate limiting us, trying again later...") + retry = True + elif status == 401 : + logger.log("BUNKERNET", "⚠️", "Instance ID is not registered, removing it and retrying a register later...") + os.remove("/opt/bunkerweb/cache/bunkernet/instance.id") + os._exit(2) + elif data["result"] != "ok" : + logger.log("BUNKERNET", "❌", "Received error from BunkerNet API while sending ping request : " + data["data"] + ", removing instance ID") + retry = True + if not retry : + bunkernet_ping = True + break + logger.log("BUNKERNET", "⚠️", "Waiting 1s and trying again ...") + os.sleep(1) - status = 1 + if bunkernet_ping : + logger.log("BUNKERNET", "ℹ️", "Connectivity with BunkerWeb is successful !") + status = 1 + if not os.path.isfile("/opt/bunkerweb/cache/bunkernet/instance.id") : + with open("/opt/bunkerweb/cache/bunkernet/instance.id", "w") as f : + f.write(bunkernet_id) + else : + logger.log("BUNKERNET", "❌", "Connectivity with BunkerWeb failed ...") + status = 2 except : status = 2 diff --git a/core/bunkernet/jobs/bunkernet.py b/core/bunkernet/jobs/bunkernet.py index 3271cf9fd..2c102e88a 100644 --- a/core/bunkernet/jobs/bunkernet.py +++ b/core/bunkernet/jobs/bunkernet.py @@ -26,8 +26,8 @@ def request(method, url, _id=None) : def register() : return request("POST", "/register") -def ping() : - return request("GET", "/ping", _id=get_id()) +def ping(_id=None) : + return request("GET", "/ping", _id=get_id() if _id is None else _id) def data() : return request("GET", "/db", _id=get_id()) diff --git a/core/bunkernet/plugin.json b/core/bunkernet/plugin.json index dfd84e720..137602a1b 100644 --- a/core/bunkernet/plugin.json +++ b/core/bunkernet/plugin.json @@ -34,7 +34,7 @@ { "name": "bunkernet-data", "file": "bunkernet-data.py", - "every": "hour", + "every": "day", "reload": true } ] diff --git a/tests/LinuxTest.py b/tests/LinuxTest.py index 1e3c95fb8..1b7e074fd 100644 --- a/tests/LinuxTest.py +++ b/tests/LinuxTest.py @@ -94,7 +94,7 @@ class LinuxTest(Test) : proc = LinuxTest.docker_exec(self.__distro, "cd /opt/" + self._name + " && ./setup-linux.sh") if proc.returncode != 0 : raise(Exception("docker exec setup failed (test)")) - proc = LinuxTest.docker_exec(self.__distro, "cp /opt/" + self._name + "/variables.env /opt/bunkerweb") : + proc = LinuxTest.docker_exec(self.__distro, "cp /opt/" + self._name + "/variables.env /opt/bunkerweb") if proc.returncode != 0 : raise(Exception("docker exec cp variables.env failed (test)")) proc = LinuxTest.docker_exec(self.__distro, "systemctl restart bunkerweb")