diff --git a/common/helper/logger.py b/common/helper/logger.py new file mode 100644 index 0000000..a5acb25 --- /dev/null +++ b/common/helper/logger.py @@ -0,0 +1,105 @@ +import os +import datetime +import locale +from threading import Thread +import queue + + +class Logger: + def __init__(self, log_folder, timezone): + self.folder = log_folder + self.tz = timezone + self.messages = [] + + def load_last(self): + files = [f for f in os.listdir(self.folder) if os.path.isfile(os.path.join(self.folder, f))] + today = datetime.datetime.now(tz=self.tz) + if len(files) == 0: + self.messages = [] + return + last = files[-1] + self.messages = [] + with open(os.path.join(self.folder, last), 'r') as f: + self.messages.append(f.readline()) + + def get_filename(self): + files = [f for f in os.listdir(self.folder) if os.path.isfile(os.path.join(self.folder, f)) and 'dairy' in f] + today = datetime.datetime.now(tz=self.tz) + if len(files) == 0: + return os.path.join(self.folder, 'diary-{0}.log'.format(today.strftime('%Y-%m-%d'))) + last = files[-1] + return os.path.join(self.folder, last) + + def start_new(self): + today = datetime.datetime.now(tz=self.tz) + filename = os.path.join(self.folder, 'diary-{0}.log'.format(today.strftime('%Y-%m-%d'))) + with open(filename, 'w') as f: + pass + + def start_log(self): + today = datetime.datetime.now(tz=self.tz) + locale.setlocale(locale.LC_TIME, 'es_ES') + msg = 'Inicio un nuevo dia siendo las {0} del {1}'.format(today.strftime('%H:%M:%S'), + today.strftime('%d de %B de %Y')) + self.log(msg) + + def stop_log(self): + now = datetime.datetime.now(tz=self.tz) + locale.setlocale(locale.LC_TIME, 'es_ES') + msg = 'Siendo las {0}, termino mis registros por hoy'.format(now.strftime('%H:%M:%S')) + self.log(msg) + msg = '--------' + self.log(msg) + + def log_action(self, action): + today = datetime.datetime.now(tz=self.tz) + locale.setlocale(locale.LC_TIME, 'es_ES') + msg = 'A las {0} del {1}, he realizado {2}'.format(today.strftime('%H:%M:%S'), + today.strftime('%d de %B de %Y'), action) + self.log(msg) + + def log_not_action(self, action): + today = datetime.datetime.now(tz=self.tz) + locale.setlocale(locale.LC_TIME, 'es_ES') + msg = 'A las {0} del {1}, no he podido realizar {2}'.format(today.strftime('%H:%M:%S'), + today.strftime('%d de %B de %Y'), action) + self.log(msg) + + def log(self, message): + line = message.rstrip('.') + '.' + self.messages.append(line) + if len(self.messages) > 1000: + self.start_new() + self.load_last() + with open(self.get_filename(), 'a') as f: + f.write(line + "\n") + + +class Worker(Thread): + def __init__(self, params, configs): + super().__init__() + self.event = params['events']['stop'] + self.queue = params['queues']['log'] + self.wait = configs.get('supervisor.wait') + self.logger = Logger(params['folders']['log'], configs.get('timezone')) + self.logging = params['logging'] + + def run(self): + self.logging.log('Starting', caller=type(self)) + while not self.event.is_set(): + self.logging.log('Looping status {0}'.format(not self.event.is_set()), caller=type(self)) + try: + message = self.queue.get(timeout=self.wait) + self.logging.log('Logger received message', caller=type(self)) + if 'is_start' in message and message['is_start']: + self.logger.start_log() + continue + if 'not' in message and message['not']: + self.logger.log_not_action(message['action']) + continue + self.logger.log_action(message['action']) + except queue.Empty: + pass + self.logger.stop_log() + self.logging.log('Exiting', caller=type(self)) + return diff --git a/common/helper/logging.py b/common/helper/logging.py new file mode 100644 index 0000000..95a6aa1 --- /dev/null +++ b/common/helper/logging.py @@ -0,0 +1,40 @@ +import os +import datetime + + +class Logging: + def __init__(self, timezone, folder=None): + self.tz = timezone + self.folder = folder + self.filename = self.get_filename() + self.log('------') + + def get_filename(self): + files = [f for f in os.listdir(self.folder) if os.path.isfile(os.path.join(self.folder, f)) and 'logging' in f] + if len(files) > 0: + filename = files[-1] + if os.path.getsize(os.path.join(self.folder, filename)) < 1024 * 1024: + return filename + today = datetime.datetime.now(tz=self.tz) + filename = 'logging-{0}.log'.format(today.strftime('%Y-%m-%d')) + base_name = filename + n = 1 + while os.path.isfile(os.path.join(self.folder, filename)): + filename = '-'.join([ + base_name, + str(n) + ]) + n += 1 + return filename + + def log(self, message, caller=None): + now = datetime.datetime.now(tz=self.tz) + if caller is None: + msg = '[{0}] {1}.'.format(now.strftime('%Y-%m-%d %H:%M:%S'), message.strip('.')) + else: + msg = '[{0}] ({2}) {1}.'.format(now.strftime('%Y-%m-%d %H:%M:%S'), message.strip('.'), caller) + print(msg) + if self.folder is not None: + filename = os.path.join(self.folder, self.filename) + with open(filename, 'a') as f: + f.write(msg + "\n")