From 1ced3dd0693fc6d88c0d5ec8432102454e10075e Mon Sep 17 00:00:00 2001 From: Alvaro Neira Ayuso Date: Mon, 13 Jan 2020 19:20:13 +0100 Subject: Improve hardware command response behavior This patch give us a better support in case of error or success execution. In error cases, the new behavior is to send an Internal Error http message (500). Otherwise, the server will receive a message with a json with this format: { "hardware" : "xyz" } "xyz" is the output saved in a specific path during the execution of InventarioHardware. --- src/linux/ogOperations.py | 6 +++++- src/ogRest.py | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/linux/ogOperations.py b/src/linux/ogOperations.py index 0034fd7..447f188 100644 --- a/src/linux/ogOperations.py +++ b/src/linux/ogOperations.py @@ -48,7 +48,11 @@ def procsoftware(httpparser, path): return result.decode('utf-8') def prochardware(path): - result = subprocess.check_output([OG_PATH + 'interfaceAdm/InventarioHardware', path], shell=True) + try: + result = subprocess.check_output([OG_PATH + 'interfaceAdm/InventarioHardware', path], shell=True) + except: + raise ValueError('Error: Incorrect command value') + return result.decode('utf-8') def procsetup(httpparser): diff --git a/src/ogRest.py b/src/ogRest.py index 90f58e7..99ecdbc 100644 --- a/src/ogRest.py +++ b/src/ogRest.py @@ -87,9 +87,19 @@ class ogThread(): client.send(restResponse.getResponse(ogResponses.OK, jsonResp)) # Process hardware - def prochardware(msgqueue, path): - msgqueue.queue.clear() - msgqueue.put(ogOperations.prochardware(path)) + def prochardware(client, path): + try: + ogOperations.prochardware(path) + except ValueError as err: + client.send(restResponse.getResponse(ogResponses.INTERNAL_ERR)) + return + + jsonResp = jsonResponse() + f = open(path, "r") + lines = f.readlines() + f.close() + jsonResp.addElement('hardware', lines[0]) + client.send(restResponse.getResponse(ogResponses.OK, jsonResp)) # Process setup def procsetup(msgqueue, httpparser): @@ -191,8 +201,7 @@ class ogRest(): def process_hardware(self, client): path = '/tmp/Chrd-' + client.ip - threading.Thread(target=ogThread.prochardware, args=(self.msgqueue, path,)).start() - client.send(restResponse.getResponse(ogResponses.OK)) + threading.Thread(target=ogThread.prochardware, args=(client, path,)).start() def process_schedule(self, client): client.send(restResponse.getResponse(ogResponses.OK)) -- cgit v1.2.3-18-g5258