diff --git a/biscd/biscd/__init__.py b/biscd/biscd/__init__.py index c257280..82c736f 100644 --- a/biscd/biscd/__init__.py +++ b/biscd/biscd/__init__.py @@ -1,23 +1,48 @@ -from os import environ +from os import path, mkdir +import logging +from logging.handlers import RotatingFileHandler from pathlib import Path import confuse + from flask import Flask from flask_bootstrap import Bootstrap -app = Flask(__name__) -Bootstrap(app) + def read_config(): conf = confuse.Configuration('biscd', __name__) try: - conf['config'].get() - except confuse.NotFoundError: - raise ValueError("Failed to open any configfile containing a 'config' object. " \ + conf['logging'].get() + except confuse.NotFoundError as not_found: + raise ValueError("Failed to open any configfile containing a 'logging' object. " \ "Please make sure the module directory contains a config_default.yaml, " \ - f"or /etc/{__name__}/config.yaml exists") + f"or /etc/{__name__}/config.yaml exists") from not_found + return conf - return conf['config'] +def setup_logging(): + # pylint: disable=no-member + if config['logging']['log_to_sdout'].get(bool): + stream_handler = logging.StreamHandler() + stream_handler.setLevel(logging.INFO) + app.logger.addHandler(stream_handler) + else: + logfile = Path(config['logging']['logfile'].as_filename()) + if not logfile.parent.exists(): + logfile.parent.mkdir(mode=0o770, parents=True) + file_handler = RotatingFileHandler(str(logfile), maxBytes=10240, backupCount=10) + file_handler.setFormatter(logging.Formatter( + '%(asctime)s %(levelname)s: %(message)s ' + '[in %(pathname)s:%(lineno)d]')) + file_handler.setLevel(logging.INFO) + app.logger.addHandler(file_handler) + app.logger.setLevel(logging.INFO) + app.logger.info('Biscd startup') + +app = Flask(__name__) config = read_config() +bootstrap = Bootstrap(app) + +setup_logging() -from biscd import routes, errors +from biscd import routes, errors, models diff --git a/biscd/biscd/config_default.yaml b/biscd/biscd/config_default.yaml index 7fb6fbb..e792be4 100644 --- a/biscd/biscd/config_default.yaml +++ b/biscd/biscd/config_default.yaml @@ -1,13 +1,12 @@ -confiag: - flask_development_server: - # Options: production, development - flask_env: development - # Options: 127.0.0.1 , 0.0.0.0 - server_host: 0.0.0.0 - port: 5000 +flask_development_server: + # Options: production, development + flask_env: development + # Options: 127.0.0.1 , 0.0.0.0 + server_host: 0.0.0.0 + port: 5000 - logging: - infofile: info.log - errorfile: error.log +logging: + log_to_sdout: true + logfile: info.log - message: Hoi \ No newline at end of file +message: Hoi \ No newline at end of file diff --git a/biscd/biscd/errors.py b/biscd/biscd/errors.py index 381301a..600233d 100644 --- a/biscd/biscd/errors.py +++ b/biscd/biscd/errors.py @@ -1,5 +1,5 @@ -from flask import render_template, request -from biscd import app, config, utils +from flask import render_template +from biscd import app, utils @app.errorhandler(400) def bad_request(error): @@ -15,10 +15,7 @@ def internal_error(error): return render_template('500.html', title='500'), 500 def write_error(error): - timestamp = utils.get_timestamp() + # pylint: disable=no-member remote = utils.get_remote_addr() - logline = f"{remote} {timestamp} {str(error)} {error.__dict__} \n" - - logfile = config.get('LOGGING', "errorfile") - with open(logfile, 'a') as logfile: - logfile.write(logline) + logline = f"{remote} {str(error)} {error.__dict__}" + app.logger.error(logline) diff --git a/biscd/biscd/models.py b/biscd/biscd/models.py deleted file mode 100644 index e69de29..0000000 diff --git a/biscd/biscd/routes.py b/biscd/biscd/routes.py index d154cd6..25594d2 100644 --- a/biscd/biscd/routes.py +++ b/biscd/biscd/routes.py @@ -1,8 +1,9 @@ -from flask import render_template, abort -from biscd import app, config, utils +from flask import render_template +from biscd import app +from biscd.models.project import Project @app.route('/', methods=['GET']) @app.route('/index', methods=['GET']) def index(): - return render_template('index.html', message=config['message'].get()) - + project_names = Project.list() + return render_template('index.html', projects=project_names) diff --git a/biscd/biscd/templates/index.html b/biscd/biscd/templates/index.html index 1afa33d..0725fda 100644 --- a/biscd/biscd/templates/index.html +++ b/biscd/biscd/templates/index.html @@ -2,5 +2,15 @@ {% block app_content %}
{{ project }} | +