Add cbpi service logfile download via journalctl

This commit is contained in:
avollkopf 2021-12-19 18:00:15 +01:00
parent 206eff88f5
commit 563fae9359
4 changed files with 55 additions and 3 deletions

View file

@ -1 +1 @@
__version__ = "4.0.0.57" __version__ = "4.0.0.58"

View file

@ -109,7 +109,7 @@ class SatelliteController:
async with AsyncExitStack() as stack: async with AsyncExitStack() as stack:
self.tasks = set() self.tasks = set()
stack.push_async_callback(cancel_tasks, self.tasks) stack.push_async_callback(cancel_tasks, self.tasks)
self.client = Client(self.host, port=self.port, username=self.username, password=self.password, will=Will(topic="cbpi/diconnect", payload="CBPi Server Disconnected")) self.client = Client(self.host, port=self.port, username=self.username, password=self.password, will=Will(topic="cbpi/disconnect", payload="CBPi Server Disconnected"))
await stack.enter_async_context(self.client) await stack.enter_async_context(self.client)

View file

@ -40,6 +40,24 @@ class SystemController:
dir_name = pathlib.Path(os.path.join(".", 'config')) dir_name = pathlib.Path(os.path.join(".", 'config'))
shutil.make_archive(output_filename, 'zip', dir_name) shutil.make_archive(output_filename, 'zip', dir_name)
async def downloadlog(self, logtime):
filename = "cbpi4.log"
fullname = pathlib.Path(os.path.join(".",filename))
output_filename="cbpi4_log.zip"
if logtime == "b":
os.system('journalctl -b -u craftbeerpi.service > {}'.format(fullname))
else:
os.system('journalctl --since \"{} hours ago\" -u craftbeerpi.service > {}'.format(logtime, fullname))
zipObj=zipfile.ZipFile(output_filename , 'w', zipfile.ZIP_DEFLATED)
zipObj.write(fullname)
zipObj.close()
os.remove(fullname)
def allowed_file(self, filename, extension): def allowed_file(self, filename, extension):
return '.' in filename and filename.rsplit('.', 1)[1] in set([extension]) return '.' in filename and filename.rsplit('.', 1)[1] in set([extension])

View file

@ -146,6 +146,40 @@ class SystemHttpEndpoints:
await response.write_eof() await response.write_eof()
return response return response
@request_mapping("/log/{logtime}/", method="GET", name="BackupConfig", auth_required=False)
async def downloadlog(self, request):
"""
---
description: Zip and download craftbeerpi.service log
tags:
- System
responses:
"200":
description: successful operation
content: # Response body
application/zip: # Media type
"""
logtime = request.match_info['logtime']
await self.controller.downloadlog(logtime)
filename = "cbpi4_log.zip"
file_name = pathlib.Path(os.path.join(".", filename))
response = web.StreamResponse(
status=200,
reason='OK',
headers={'Content-Type': 'application/zip'},
)
await response.prepare(request)
with open(file_name, 'rb') as file:
for line in file.readlines():
await response.write(line)
await response.write_eof()
os.remove(file_name)
return response
@request_mapping("/restore", method="POST", name="RestoreConfig", auth_required=False) @request_mapping("/restore", method="POST", name="RestoreConfig", auth_required=False)
async def restore(self, request): async def restore(self, request):
""" """
@ -192,4 +226,4 @@ class SystemHttpEndpoints:
data = await request.post() data = await request.post()
logging.info("Data received") logging.info("Data received")
await self.controller.uploadSVG(data) await self.controller.uploadSVG(data)
return web.Response(status=200) return web.Response(status=200)