From 0668c7e350d6648f119d301713474e42e481126b Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Fri, 24 Jun 2016 06:26:02 +0200 Subject: [PATCH] [enh] journal class works as expected \o/ --- src/yunohost/journals.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/yunohost/journals.py b/src/yunohost/journals.py index 20037bbc..ab245a78 100644 --- a/src/yunohost/journals.py +++ b/src/yunohost/journals.py @@ -25,6 +25,9 @@ """ import os +import yaml + +from datetime import datetime from moulinette.utils.log import getActionLogger @@ -54,17 +57,47 @@ class Journal(object): def __init__(self, name, category, on_stdout=None, on_stderr=None, on_write=None, **kwargs): self.name = name self.category = category - self.first_write = False + self.first_write = True self.started_at = None + self.path = os.path.join(JOURNALS_PATH, category) + + self.fd = None + self.on_stdout = [] if on_stdout is None else on_stdout self.on_stderr = [] if on_stderr is None else on_stderr self.on_write = [] if on_write is None else on_write self.additional_information = kwargs + def __del__(self): + if self.fd: + self.fd.close() + def write(self, line): - print "[journal]", line.rstrip() + if self.first_write: + self._do_first_write() + self.first_write = False + + self.fd.write("%s: " % datetime.now().strftime("%F_%X").replace(":", "-")) + self.fd.write(line.rstrip()) + self.fd.write("\n") + self.fd.flush() + + def _do_first_write(self): + self.started_at = datetime.now() + + if not os.path.exists(self.path): + os.makedirs(self.path) + + file_name = "%s_%s.journal" % (self.name if isinstance(self.name, basestring) else "_".join(self.name), self.started_at.strftime("%F_%X").replace(":", "-")) + + serialized_additional_information = yaml.safe_dump(self.additional_information, default_flow_style=False) + + self.fd = open(os.path.join(self.path, file_name), "w") + + self.fd.write(serialized_additional_information) + self.fd.write("\n---\n") def stdout(self, line): for i in self.on_stdout: