# -*- mode: python -*- # -*- coding: utf-8 -*- import os import time import traceback from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header from flask import g, current_app """Simple & stupid file logguer, used only to debug (logging to SQL is done in scolog) """ LOG_FILENAME = "notes.log" # empty to disable logging DEFAULT_LOG_DIR = "/tmp" # clients should call set_log_directory to change this ALARM_DESTINATION = "emmanuel.viennet@gmail.com" # XXX a mettre en preference class _logguer(object): def __init__(self): self.file = None self.directory = None self.set_log_directory(DEFAULT_LOG_DIR) def set_log_directory(self, directory): if self.directory != directory and self.file: # changing directory when a log is already open: close it self.file.close() self.file = None self.directory = directory def _open(self): if LOG_FILENAME: path = os.path.join(self.directory, LOG_FILENAME) self.file = open(path, "a") self("new _logguer (%s)" % path) else: self.file = None # logging disabled def __call__(self, msg): if not self.file: self._open() if self.file: try: dept = getattr(g, "scodoc_dept", "") except RuntimeError: # Flask Working outside of application context. dept = "" if dept: dept = " (%s)" % dept msg = dept + " " + msg self.file.write("[%s]%s\n" % (time.strftime("%a %b %d %H:%M:%S %Y"), msg)) if current_app: current_app.logger.info(msg) self.file.flush() log = _logguer() # Alarms by email: def sendAlarm(context, subj, txt): from . import sco_utils from . import sco_emails from . import sco_preferences msg = MIMEMultipart() subj = Header(subj, sco_utils.SCO_ENCODING) msg["Subject"] = subj msg["From"] = sco_preferences.get_preference("email_from_addr") msg["To"] = ALARM_DESTINATION msg.epilogue = "" txt = MIMEText(txt, "plain", sco_utils.SCO_ENCODING) msg.attach(txt) sco_emails.sendEmail(context, msg) # Debug: log call stack def logCallStack(): log("Call stack:\n" + "\n".join(x.strip() for x in traceback.format_stack()[:-1]))