Added app sdk retries during startup if backend is unavailable

This commit is contained in:
frikky
2022-11-06 17:17:54 +01:00
parent be0aed82e3
commit 8a8fe1f9f9
+36 -18
View File
@@ -1428,33 +1428,51 @@ class AppBase:
if isinstance(self.full_execution, str) and len(self.full_execution) == 0: if isinstance(self.full_execution, str) and len(self.full_execution) == 0:
self.logger.info("[DEBUG] NO EXECUTION - LOADING!") self.logger.info("[DEBUG] NO EXECUTION - LOADING!")
try: try:
tmpdata = { failed = False
"authorization": self.authorization, rettext = ""
"execution_id": self.current_execution_id for i in range(0, 5):
} tmpdata = {
"authorization": self.authorization,
"execution_id": self.current_execution_id
}
self.logger.info("[ERROR] Before FULLEXEC stream result") self.logger.info("[ERROR] Before FULLEXEC stream result")
ret = requests.post( ret = requests.post(
"%s/api/v1/streams/results" % (self.base_url), "%s/api/v1/streams/results" % (self.base_url),
headers=headers, headers=headers,
json=tmpdata json=tmpdata
) )
if ret.status_code == 200: if ret.status_code == 200:
fullexecution = ret.json() fullexecution = ret.json()
else: failed = False
try: break
self.logger.info("[ERROR] Error in app with status code for results. Crashing because results can't be handled. Status: %d" % ret.status_code)
except json.decoder.JSONDecodeError:
pass
elif ret.status_code == 500:
self.logger.info("[ERROR] (fails: %d) Error in app with status code %d for results (1). RETRYING because results can't be handled" % (i+1, ret.status_code))
rettext = ret.text
failed = True
time.sleep(10)
continue
else:
self.logger.info("[ERROR] Error in app with status code %d for results (2). Crashing because results can't be handled" % ret.status_code)
rettext = ret.text
failed = True
break
if failed:
self.action_result["result"] = json.dumps({ self.action_result["result"] = json.dumps({
"success": False, "success": False,
"reason": f"Bad result from backend during startup of app: {ret.status_code}", "reason": f"Bad result from backend during startup of app: {ret.status_code}",
"extended_reason": f"{ret.text}" "extended_reason": f"{rettext}"
}) })
self.send_result(self.action_result, headers, stream_path) self.send_result(self.action_result, headers, stream_path)
return return
except requests.exceptions.ConnectionError as e: except requests.exceptions.ConnectionError as e:
self.logger.info("[ERROR] FullExec Connectionerror: %s" % e) self.logger.info("[ERROR] FullExec Connectionerror: %s" % e)
self.action_result["result"] = json.dumps({ self.action_result["result"] = json.dumps({