summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ogClient.py3
-rw-r--r--src/ogRest.py49
-rw-r--r--src/restRequest.py5
3 files changed, 35 insertions, 22 deletions
diff --git a/src/ogClient.py b/src/ogClient.py
index 04b6d01..31ee5d3 100644
--- a/src/ogClient.py
+++ b/src/ogClient.py
@@ -47,6 +47,7 @@ class ogClient:
self.ip = self.CONFIG['opengnsys']['ip']
self.port = self.CONFIG['opengnsys']['port']
self.ogrest = ogRest(self.CONFIG)
+ self.seq = None
def get_socket(self):
return self.sock
@@ -144,6 +145,8 @@ class ogClient:
if 'Content-Length' in headers.keys():
self.content_len = int(headers['Content-Length'])
+ if 'X-Sequence' in headers.keys():
+ self.seq = int(headers['X-Sequence'])
self.trailer = True
# Add 4 because self.data.find("\r\n\r\n") does not count
diff --git a/src/ogRest.py b/src/ogRest.py
index 77a5d5d..5a89d27 100644
--- a/src/ogRest.py
+++ b/src/ogRest.py
@@ -39,7 +39,7 @@ class jsonBody():
return json.dumps(self.jsontree)
class restResponse():
- def __init__(self, response, json_body=None):
+ def __init__(self, response, json_body=None, seq=None):
self.msg = ''
if response == ogResponses.BAD_REQUEST:
self.msg = 'HTTP/1.0 400 Bad Request'
@@ -65,6 +65,11 @@ class restResponse():
self.msg += '\r\n'
+ if seq:
+ self.seq = seq
+ self.msg += 'X-Sequence: ' + str(seq)
+ self.msg += '\r\n'
+
if json_body:
self.msg += 'Content-Length: ' + str(len(json_body.dump()))
self.msg += '\r\nContent-Type: application/json'
@@ -80,7 +85,7 @@ class restResponse():
class ogThread():
def shellrun(client, request, ogRest):
if not request.getrun():
- response = restResponse(ogResponses.BAD_REQUEST)
+ response = restResponse(ogResponses.BAD_REQUEST, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
return
@@ -94,10 +99,10 @@ class ogThread():
if request.getEcho():
json_body = jsonBody()
json_body.add_element('out', shellout)
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
client.send(response.get())
else:
- response = restResponse(ogResponses.OK)
+ response = restResponse(ogResponses.OK, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
@@ -116,7 +121,7 @@ class ogThread():
ogRest.send_internal_server_error(client, exc=e)
return
- response = restResponse(ogResponses.OK)
+ response = restResponse(ogResponses.OK, seq=client.seq)
client.send(response.get())
client.disconnect()
@@ -131,7 +136,7 @@ class ogThread():
json_body.add_element('partition', request.getPartition())
json_body.add_element('software', software)
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
@@ -145,7 +150,7 @@ class ogThread():
json_body = jsonBody()
json_body.add_element('hardware', result)
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
@@ -158,7 +163,7 @@ class ogThread():
json_body = jsonBody(out)
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
@@ -174,7 +179,7 @@ class ogThread():
json_body.add_element('partition', request.getPartition())
json_body.add_element('image_id', request.getId())
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
@@ -202,7 +207,7 @@ class ogThread():
json_body.add_element('filesystem', image_info.filesystem)
json_body.add_element('datasize', datasize)
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
@@ -215,7 +220,7 @@ class ogThread():
json_body = jsonBody(out)
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
client.send(response.get())
ogRest.state = ThreadState.IDLE
@@ -260,7 +265,7 @@ class ogRest():
def send_internal_server_error(self, client, exc=None):
if exc:
logging.exception('Unexpected error')
- response = restResponse(ogResponses.INTERNAL_ERR)
+ response = restResponse(ogResponses.INTERNAL_ERR, seq=client.seq)
client.send(response.get())
self.state = ThreadState.IDLE
@@ -277,7 +282,7 @@ class ogRest():
if self.state == ThreadState.BUSY:
logging.warn('Request has been received '
'while ogClient is busy')
- response = restResponse(ogResponses.SERVICE_UNAVAILABLE)
+ response = restResponse(ogResponses.SERVICE_UNAVAILABLE, seq=client.seq)
client.send(response.get())
return
else:
@@ -295,7 +300,7 @@ class ogRest():
else:
logging.warn('Unsupported request: %s',
{URI[:ogRest.LOG_LENGTH]})
- response = restResponse(ogResponses.BAD_REQUEST)
+ response = restResponse(ogResponses.BAD_REQUEST, seq=client.seq)
client.send(response.get())
self.state = ThreadState.IDLE
elif ("POST" in method):
@@ -320,11 +325,11 @@ class ogRest():
else:
logging.warn('Unsupported request: %s',
URI[:ogRest.LOG_LENGTH])
- response = restResponse(ogResponses.BAD_REQUEST)
+ response = restResponse(ogResponses.BAD_REQUEST, seq=client.seq)
client.send(response.get())
self.state = ThreadState.IDLE
else:
- response = restResponse(ogResponses.BAD_REQUEST)
+ response = restResponse(ogResponses.BAD_REQUEST, seq=client.seq)
client.send(response.get())
self.state = ThreadState.IDLE
@@ -345,7 +350,7 @@ class ogRest():
self.state = ThreadState.IDLE
def process_reboot(self, client):
- response = restResponse(ogResponses.IN_PROGRESS)
+ response = restResponse(ogResponses.IN_PROGRESS, seq=client.seq)
client.send(response.get())
if self.mode != 'virtual':
@@ -356,7 +361,7 @@ class ogRest():
threading.Thread(target=ogThread.reboot, args=(self,)).start()
def process_poweroff(self, client):
- response = restResponse(ogResponses.IN_PROGRESS)
+ response = restResponse(ogResponses.IN_PROGRESS, seq=client.seq)
client.send(response.get())
if self.mode != 'virtual':
@@ -370,7 +375,7 @@ class ogRest():
try:
status = self.operations.probe(self)
except:
- response = restResponse(ogResponses.INTERNAL_ERR)
+ response = restResponse(ogResponses.INTERNAL_ERR, seq=client.seq)
client.send(response.get())
return
@@ -379,9 +384,9 @@ class ogRest():
json_body.add_element(k, v)
if self.state != ThreadState.BUSY:
- response = restResponse(ogResponses.OK, json_body)
+ response = restResponse(ogResponses.OK, json_body, seq=client.seq)
else:
- response = restResponse(ogResponses.IN_PROGRESS, json_body)
+ response = restResponse(ogResponses.IN_PROGRESS, json_body, seq=client.seq)
client.send(response.get())
@@ -398,7 +403,7 @@ class ogRest():
threading.Thread(target=ogThread.hardware, args=(client, self,)).start()
def process_schedule(self, client):
- response = restResponse(ogResponses.OK)
+ response = restResponse(ogResponses.OK, seq=client.seq)
client.send(response.get())
self.state = ThreadState.IDLE
diff --git a/src/restRequest.py b/src/restRequest.py
index 61d64c6..b14ad20 100644
--- a/src/restRequest.py
+++ b/src/restRequest.py
@@ -35,6 +35,7 @@ class restRequest:
self.id = None
self.echo = None
self.code = None
+ self.seq = None
def parser(self,data):
self.request_line, self.headers_alone = data.split('\n', 1)
@@ -49,6 +50,10 @@ class restRequest:
if 'Content-Length' in self.headers.keys():
self.content_len = int(self.headers['Content-Length'])
+ if 'X-Sequence' in self.headers.keys():
+ self.seq = int(self.headers['X-Sequence'])
+ logging.debug(f'Request with sequence number {self.seq}')
+
if (not self.request_line == None or not self.request_line == ''):
self.method = self.request_line.split('/', 1)[0]
self.URI = self.request_line.split('/', 1)[1]