diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ packages.append('spaceapi.schema') setup( name='c3l_spaceapi', - version='0.0.7', + version='0.0.8', url=None, license='GPLv3+', author='Dennis Fink', diff --git a/spaceapi/__init__.py b/spaceapi/__init__.py --- a/spaceapi/__init__.py +++ b/spaceapi/__init__.py @@ -3,12 +3,21 @@ import os import os.path import base64 +import logging +import logging.handlers + from flask import Flask from flask_bootstrap import Bootstrap config_file = os.path.abspath('config.json') bootstrap = Bootstrap() +logging_debug_string = ('%(levelname)s:%(name)s:%(asctime)s:%(filename)s' + ':%(lineno)d: %(message)s') +logging_string = '%(levelname)s - %(name)s - %(asctime)s - %(message)s' +logging_debug_formatter = logging.Formatter(logging_debug_string) +logging_formatter = logging.Formatter(logging_string) + def create_app(): app = Flask(__name__) @@ -40,6 +49,40 @@ def create_app(): bootstrap.init_app(app) + app.logger.setLevel(logging.DEBUG) + stream_handler = logging.StreamHandler() + stream_handler.setLevel(logging.DEBUG) + stream_handler.setFormatter(logging_debug_formatter) + + if not os.path.exists('spaceapi.log'): + open('spaceapi.log', mode='a').close() + + rotating_file_handler = logging.handlers.RotatingFileHandler( + 'spaceapi.log', + maxBytes=1300000, + backupCount=10, + encoding='utf-8') + rotating_file_handler.setLevel(logging.INFO) + rotating_file_handler.setFormatter(logging_formatter) + + if app.debug or ('ENABLE_DEBUG_LOG' in app.config and + app.config['ENABLE_DEBUG_LOG']): + + if not os.path.exists('spaceapi_debug.log'): + open('spaceapi_debug.log', mode='a').close() + + second_rotating_file_handler = logging.handlers.RotatingFileHandler( + 'spaceapi_debug.log', + maxBytes=1300000, + backupCount=20, + encoding='utf-8') + second_rotating_file_handler.setLevel(logging.DEBUG) + second_rotating_file_handler.setFormatter(logging_debug_formatter) + app.logger.addHandler(second_rotating_file_handler) + + app.logger.addHandler(stream_handler) + app.logger.addHandler(rotating_file_handler) + @app.after_request def add_headers(response): response.headers.setdefault('Access-Control-Allow-Origin', '*') diff --git a/spaceapi/utils.py b/spaceapi/utils.py --- a/spaceapi/utils.py +++ b/spaceapi/utils.py @@ -2,6 +2,7 @@ import json import os.path from time import time import random +from functools import wraps from flask import request, current_app @@ -129,7 +130,11 @@ class ActiveStatus(Singleton, dict): tweet = random.choice(possible_open_tweets) else: tweet = random.choice(possible_closed_tweets) - send_tweet(tweet) + try: + send_tweet(tweet) + except Exception as e: + current_app.logger.error('Sending tweet failed! %s' % e, + exc_info=True) if not value: if 'people_now_present' in self['sensors']: @@ -177,3 +182,13 @@ def first(iterable, keys): return key raise ValueError + + +def pass_active_status(f): + @wraps(f) + def wrapper(*args, **kwargs): + status = ActiveStatus() + rv = f(status, *args, **kwargs) + status.save_last_state() + return rv + return wrapper