Handle more errors with Bunkernet job

This commit is contained in:
Théophile Diot 2023-02-16 13:19:50 +01:00
parent 3b01b51445
commit f4081ebd3b
No known key found for this signature in database
GPG Key ID: E752C80DB72BB014
3 changed files with 32 additions and 9 deletions

View File

@ -78,6 +78,11 @@ try:
"BunkerNet API is rate limiting us, trying again later...",
)
_exit(0)
elif status == 403:
logger.warning(
"BunkerNet has banned this instance, retrying a register later...",
)
_exit(0)
elif data["result"] != "ok":
logger.error(
f"Received error from BunkerNet API while sending db request : {data['data']}, removing instance ID",

View File

@ -66,14 +66,19 @@ try:
"BunkerNet API is rate limiting us, trying again later...",
)
_exit(0)
elif status == 403:
logger.warning(
"BunkerNet has banned this instance, retrying a register later...",
)
_exit(0)
elif status != 200:
logger.error(
f"Error {status} from BunkerNet API : {data['data']}",
)
_exit(1)
elif data["result"] != "ok":
elif data.get("result", "ko") != "ok":
logger.error(
f"Received error from BunkerNet API while sending register request : {data['data']}"
f"Received error from BunkerNet API while sending register request : {data.get('data', {})}"
)
_exit(1)
bunkernet_id = data["data"]
@ -98,15 +103,19 @@ try:
"BunkerNet API is rate limiting us, trying again later...",
)
retry = True
elif status == 403:
logger.warning(
"BunkerNet has banned this instance, retrying a register later...",
)
elif status == 401:
logger.warning(
"Instance ID is not registered, removing it and retrying a register later...",
)
remove("/var/cache/bunkerweb/bunkernet/instance.id")
_exit(2)
elif data["result"] != "ok":
elif data.get("result", "ko") != "ok":
logger.error(
f"Received error from BunkerNet API while sending ping request : {data['data']}, removing instance ID",
f"Received error from BunkerNet API while sending ping request : {data.get('data', {})}, removing instance ID",
)
retry = True
if not retry:
@ -115,7 +124,7 @@ try:
logger.warning("Waiting 1s and trying again ...")
sleep(1)
if bunkernet_ping:
if bunkernet_ping and status != 403:
logger.info("Connectivity with BunkerWeb is successful !")
status = 1
if not isfile("/var/cache/bunkerweb/bunkernet/instance.id"):

View File

@ -1,9 +1,12 @@
import requests, traceback
from typing import Literal, Optional, Tuple, Union
import requests
from os import getenv
from os.path import exists
def request(method, url, _id=None):
def request(
method: Union[Literal["POST"], Literal["GET"]], url: str, _id: Optional[str] = None
) -> Tuple[bool, Optional[int], Union[str, dict]]:
data = {"integration": get_integration(), "version": get_version()}
headers = {"User-Agent": f"BunkerWeb/{get_version()}"}
if _id is not None:
@ -19,11 +22,17 @@ def request(method, url, _id=None):
status = resp.status_code
if status == 429:
return True, 429, "rate limited"
raw_data = resp.json()
elif status == 403:
return True, 403, "forbidden"
raw_data: dict = resp.json()
assert "result" in raw_data
assert "data" in raw_data
except requests.ReadTimeout:
return False, None, "request timed out"
except Exception as e:
return False, None, traceback.format_exc()
return False, None, f"request failed: {e}"
return True, status, raw_data