ogRest: improve error logging when executing operations

Capture all possible Python exceptions in the try/except block of every
opengnsys operation.

Create an error handling function to deduplicate code in the except
block. The error handling function resets the ogRest state to IDLE and
sends the corresponding 500 Internal Server Error.

This *does not cover* every possible error. There are functions inside
ogThread which contain code that may raise errors that are not covered
by any try/except block.
more_events v1.2.6
Jose M. Guisado 2023-03-09 16:04:18 +01:00
parent 5b5ef607ec
commit 97e753cbfd
1 changed files with 23 additions and 32 deletions

View File

@ -87,10 +87,8 @@ class ogThread():
try: try:
shellout = ogRest.operations.shellrun(request, ogRest) shellout = ogRest.operations.shellrun(request, ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
if request.getEcho(): if request.getEcho():
@ -114,10 +112,8 @@ class ogThread():
def session(client, request, ogRest): def session(client, request, ogRest):
try: try:
ogRest.operations.session(request, ogRest) ogRest.operations.session(request, ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
response = restResponse(ogResponses.OK) response = restResponse(ogResponses.OK)
@ -127,10 +123,8 @@ class ogThread():
def software(client, request, path, ogRest): def software(client, request, path, ogRest):
try: try:
software = ogRest.operations.software(request, path, ogRest) software = ogRest.operations.software(request, path, ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
json_body = jsonBody() json_body = jsonBody()
@ -144,10 +138,8 @@ class ogThread():
def hardware(client, path, ogRest): def hardware(client, path, ogRest):
try: try:
ogRest.operations.hardware(path, ogRest) ogRest.operations.hardware(path, ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
json_body = jsonBody() json_body = jsonBody()
@ -161,10 +153,8 @@ class ogThread():
def setup(client, request, ogRest): def setup(client, request, ogRest):
try: try:
out = ogRest.operations.setup(request, ogRest) out = ogRest.operations.setup(request, ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
json_body = jsonBody(out) json_body = jsonBody(out)
@ -176,10 +166,8 @@ class ogThread():
def image_restore(client, request, ogRest): def image_restore(client, request, ogRest):
try: try:
ogRest.operations.image_restore(request, ogRest) ogRest.operations.image_restore(request, ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
json_body = jsonBody() json_body = jsonBody()
@ -197,10 +185,8 @@ class ogThread():
request, request,
ogRest) ogRest)
software = ogRest.operations.software(request, path, ogRest) software = ogRest.operations.software(request, path, ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
kibi = 1024 kibi = 1024
@ -226,10 +212,8 @@ class ogThread():
def refresh(client, ogRest): def refresh(client, ogRest):
try: try:
out = ogRest.operations.refresh(ogRest) out = ogRest.operations.refresh(ogRest)
except ValueError as err: except Exception as e:
response = restResponse(ogResponses.INTERNAL_ERR) ogRest.send_internal_server_error(client, exc=e)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return return
json_body = jsonBody(out) json_body = jsonBody(out)
@ -276,6 +260,13 @@ class ogRest():
else: else:
raise ValueError('Mode not supported.') raise ValueError('Mode not supported.')
def send_internal_server_error(self, client, exc=None):
if exc:
logging.exception('Unexpected error')
response = restResponse(ogResponses.INTERNAL_ERR)
client.send(response.get())
self.state = ThreadState.IDLE
def process_request(self, request, client): def process_request(self, request, client):
method = request.get_method() method = request.get_method()
URI = request.get_uri() URI = request.get_uri()