Files
secretary/common/helper/logger.py
2020-11-12 18:56:12 -03:00

99 lines
3.7 KiB
Python

import os
import datetime
import locale
from threading import Thread
import queue
class Logger:
"""
Clase que lleva el diario de actividades de la secretaria
"""
def __init__(self, log_folder, timezone, name):
self.folder = log_folder
self.tz = timezone
self.name = name
self.messages = []
def get_filename(self):
files = [f for f in os.listdir(self.folder) if os.path.isfile(os.path.join(self.folder, f)) and 'diary' in f]
today = datetime.datetime.now(tz=self.tz)
if len(files) == 0:
return os.path.join(self.folder, self.name + '-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, self.name + '-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 una nueva jornada 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 esta jornada'.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'), params['logger']['name'])
self.logging = params['logging']
self.queue.put({'is_start': True})
def run(self):
self.logging.log('Starting', caller=type(self))
while not self.event.is_set():
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