diff --git a/data/actionsmap/yunohost.yml b/data/actionsmap/yunohost.yml index b4e160e59..91b6c2c76 100644 --- a/data/actionsmap/yunohost.yml +++ b/data/actionsmap/yunohost.yml @@ -1605,3 +1605,11 @@ journals: full: --limit help: Maximum number of journals per categories type: int + + ### journals_display() + display: + action_help: List journals + api: GET /journals/ + arguments: + file_name: + help: Journal file name diff --git a/src/yunohost/journals.py b/src/yunohost/journals.py index 18a0d5672..b9de4bcda 100644 --- a/src/yunohost/journals.py +++ b/src/yunohost/journals.py @@ -76,6 +76,40 @@ def journals_list(limit=None): return result +def journals_display(file_name): + if not os.path.exists(JOURNALS_PATH): + # TODO raise exception + return {} + + for category in os.listdir(JOURNALS_PATH): + for journal in filter(lambda x: x.endswith(".journal"), os.listdir(os.path.join(JOURNALS_PATH, category))): + if journal != file_name: + continue + + with open(os.path.join(JOURNALS_PATH, category, file_name), "r") as content: + content = content.read() + + journal = journal[:-len(".journal")] + journal = journal.split("_") + journal_datetime = datetime.strptime(" ".join(journal[-2:]), "%Y-%m-%d %H-%M-%S") + + infos, logs = content.split("\n---\n", 1) + infos = yaml.safe_load(infos) + logs = [x.split(": ", 1) for x in logs.split("\n") if x] + + return { + "started_at": journal_datetime, + "name": " ".join(journal[:-2]), + "file_name": file_name, + "path": os.path.join(JOURNALS_PATH, category, file_name), + "metadata": infos, + "logs": logs, + } + + # TODO raise exception + return {} + + class Journal(object): def __init__(self, name, category, on_stdout=None, on_stderr=None, on_write=None, **kwargs): self.name = name