mirror of https://git.48k.eu/ogclient
src: add POST cache/delete method
Add API REST method to delete cache contents. Resquest payload structure: { 'images': ['windows.img', 'linux.img'] } The client will try to delete as many images in cache as available with names matching the list of filenames in the 'images' field. Resquest response structure: { 'cache': [ {'name': 'windows.img', 'size': 2432370213, checksum: '5d4dcc677bc19f40a647d0002f4ade90'}, {'name': 'linux.img', 'size': 243234534213, checksum: '3eb22f888f88a55ad954f55644e1192e'} ] }master
parent
e2d48ba3a0
commit
8de2b785a9
|
@ -55,6 +55,9 @@ class OgLinuxOperations:
|
||||||
def image_create(self, path, request, ogRest):
|
def image_create(self, path, request, ogRest):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def cache_delete(self, request, ogRest):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
def refresh(self, ogRest):
|
def refresh(self, ogRest):
|
||||||
return {"status": "LINUX"}
|
return {"status": "LINUX"}
|
||||||
|
|
||||||
|
|
|
@ -576,6 +576,46 @@ class OgLiveOperations:
|
||||||
logging.info('Image creation command OK')
|
logging.info('Image creation command OK')
|
||||||
return image_info
|
return image_info
|
||||||
|
|
||||||
|
def cache_delete(self, request, ogRest):
|
||||||
|
images = request.getImages()
|
||||||
|
deleted_images = []
|
||||||
|
|
||||||
|
if not mount_cache():
|
||||||
|
return
|
||||||
|
|
||||||
|
img_dir = OG_CACHE_IMAGE_PATH
|
||||||
|
|
||||||
|
if not os.path.isdir(img_dir):
|
||||||
|
return cache_contents
|
||||||
|
|
||||||
|
for file_name in os.listdir(img_dir):
|
||||||
|
file_path = os.path.join(img_dir, file_name)
|
||||||
|
|
||||||
|
if not os.path.isfile(file_path):
|
||||||
|
continue
|
||||||
|
if not file_name.endswith('.img'):
|
||||||
|
continue
|
||||||
|
if os.sep in file_name:
|
||||||
|
logging.info(f'Detected cache deletion request of filename with a path, ignoring {file_name}')
|
||||||
|
continue
|
||||||
|
|
||||||
|
if file_name in images:
|
||||||
|
os.remove(file_path)
|
||||||
|
|
||||||
|
csum_path = file_path + '.full.sum'
|
||||||
|
if not os.path.isfile(csum_path):
|
||||||
|
logging.info(f'Missing checksum file for {file_path}')
|
||||||
|
continue
|
||||||
|
|
||||||
|
os.remove(csum_path)
|
||||||
|
|
||||||
|
result = {'cache': self._get_cache_contents()}
|
||||||
|
|
||||||
|
self._restartBrowser(self._url)
|
||||||
|
|
||||||
|
logging.info('Sending response to cache/delete request')
|
||||||
|
return result
|
||||||
|
|
||||||
def refresh(self, ogRest):
|
def refresh(self, ogRest):
|
||||||
self._restartBrowser(self._url_log)
|
self._restartBrowser(self._url_log)
|
||||||
|
|
||||||
|
|
|
@ -215,6 +215,19 @@ class ogThread():
|
||||||
client.send(response.get())
|
client.send(response.get())
|
||||||
ogRest.state = ThreadState.IDLE
|
ogRest.state = ThreadState.IDLE
|
||||||
|
|
||||||
|
def cache_delete(client, request, ogRest):
|
||||||
|
try:
|
||||||
|
out = ogRest.operations.cache_delete(request, ogRest)
|
||||||
|
except Exception as e:
|
||||||
|
ogRest.send_internal_server_error(client, exc=e)
|
||||||
|
return
|
||||||
|
|
||||||
|
json_body = jsonBody(out)
|
||||||
|
|
||||||
|
response = restResponse(ogResponses.OK, json_body, seq=client.seq)
|
||||||
|
client.send(response.get())
|
||||||
|
ogRest.state = ThreadState.IDLE
|
||||||
|
|
||||||
def refresh(client, ogRest):
|
def refresh(client, ogRest):
|
||||||
try:
|
try:
|
||||||
out = ogRest.operations.refresh(ogRest)
|
out = ogRest.operations.refresh(ogRest)
|
||||||
|
@ -328,6 +341,8 @@ class ogRest():
|
||||||
self.process_stop(client)
|
self.process_stop(client)
|
||||||
elif ("image/create" in URI):
|
elif ("image/create" in URI):
|
||||||
self.process_imagecreate(client, request)
|
self.process_imagecreate(client, request)
|
||||||
|
elif ("cache/delete" in URI):
|
||||||
|
self.process_cache_delete(client, request)
|
||||||
else:
|
else:
|
||||||
logging.warn('Unsupported request: %s',
|
logging.warn('Unsupported request: %s',
|
||||||
URI[:ogRest.LOG_LENGTH])
|
URI[:ogRest.LOG_LENGTH])
|
||||||
|
@ -430,5 +445,8 @@ class ogRest():
|
||||||
def process_imagecreate(self, client, request):
|
def process_imagecreate(self, client, request):
|
||||||
threading.Thread(target=ogThread.image_create, args=(client, request, self,)).start()
|
threading.Thread(target=ogThread.image_create, args=(client, request, self,)).start()
|
||||||
|
|
||||||
|
def process_cache_delete(self, client, request):
|
||||||
|
threading.Thread(target=ogThread.cache_delete, args=(client, request, self,)).start()
|
||||||
|
|
||||||
def process_refresh(self, client):
|
def process_refresh(self, client):
|
||||||
threading.Thread(target=ogThread.refresh, args=(client, self,)).start()
|
threading.Thread(target=ogThread.refresh, args=(client, self,)).start()
|
||||||
|
|
|
@ -37,6 +37,7 @@ class restRequest:
|
||||||
self.code = None
|
self.code = None
|
||||||
self.seq = None
|
self.seq = None
|
||||||
self.backup = None
|
self.backup = None
|
||||||
|
self.images = None
|
||||||
|
|
||||||
def parser(self,data):
|
def parser(self,data):
|
||||||
self.request_line, self.headers_alone = data.split('\n', 1)
|
self.request_line, self.headers_alone = data.split('\n', 1)
|
||||||
|
@ -75,6 +76,9 @@ class restRequest:
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
if "images" in json_param:
|
||||||
|
self.images = json_param["images"]
|
||||||
|
|
||||||
if "disk" in json_param:
|
if "disk" in json_param:
|
||||||
self.disk = json_param["disk"]
|
self.disk = json_param["disk"]
|
||||||
|
|
||||||
|
@ -114,6 +118,9 @@ class restRequest:
|
||||||
def get_method(self):
|
def get_method(self):
|
||||||
return self.method
|
return self.method
|
||||||
|
|
||||||
|
def getImages(self):
|
||||||
|
return self.images
|
||||||
|
|
||||||
def get_uri(self):
|
def get_uri(self):
|
||||||
return self.URI
|
return self.URI
|
||||||
|
|
||||||
|
|
|
@ -458,6 +458,9 @@ class OgVirtualOperations:
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def cache_delete(self, request, ogRest):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
def software(self, request, path, ogRest):
|
def software(self, request, path, ogRest):
|
||||||
DPKG_PATH = '/var/lib/dpkg/status'
|
DPKG_PATH = '/var/lib/dpkg/status'
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,9 @@ class OgWindowsOperations:
|
||||||
def image_create(self, path, request, ogRest):
|
def image_create(self, path, request, ogRest):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def cache_delete(self, request, ogRest):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
def refresh(self, ogRest):
|
def refresh(self, ogRest):
|
||||||
return {"status": "WIN"}
|
return {"status": "WIN"}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue