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 %}

Biscd, what else would you like with your Gitea?

-

{{ message }}

+
+ + + {% for project in projects %} + + + + {% endfor %} + +
{{ project }}
+
{% endblock %} diff --git a/biscd/biscd/utils.py b/biscd/biscd/utils.py index e69de29..c96aab8 100644 --- a/biscd/biscd/utils.py +++ b/biscd/biscd/utils.py @@ -0,0 +1,11 @@ +from datetime import datetime + +from flask import request + +def get_timestamp(): + return datetime.now().astimezone().isoformat(timespec='milliseconds') + +def get_remote_addr(): + #print(f"HTTP_X_REAL_IP: {request.environ.get('HTTP_X_REAL_IP')}") + #print(f"HTTP_X_FORWARDED_FOR: {request.environ.get('HTTP_X_FORWARDED_FOR')}") + return request.environ.get('HTTP_X_FORWARDED_FOR', request.remote_addr) diff --git a/biscd/config_example.yaml b/biscd/config_example.yaml new file mode 100644 index 0000000..081a894 --- /dev/null +++ b/biscd/config_example.yaml @@ -0,0 +1,12 @@ +flask_development_server: + # Options: production, development + flask_env: production + # Options: 127.0.0.1 , 0.0.0.0 + server_host: 127.0.0.1 + port: 5000 + +logging: + log_to_sdout: true + logfile: info.log + +message: Hoi \ No newline at end of file diff --git a/biscd/example.yaml b/biscd/example.yaml deleted file mode 100644 index 8c3ee62..0000000 --- a/biscd/example.yaml +++ /dev/null @@ -1,13 +0,0 @@ -config: - flask_development_server: - # Options: production, development - flask_env: production - # Options: 127.0.0.1 , 0.0.0.0 - server_host: 127.0.0.1 - port: 5000 - - logging: - infofile: info.log - errorfile: error.log - - message: Hoi \ No newline at end of file diff --git a/biscd/projects.yaml b/biscd/projects_example.yaml similarity index 53% rename from biscd/projects.yaml rename to biscd/projects_example.yaml index 728e0c4..065e1ad 100644 --- a/biscd/projects.yaml +++ b/biscd/projects_example.yaml @@ -7,3 +7,10 @@ projects: requirements-file: requirements.txt tests: tests.py + - Foo: + url: bar + git_repo: https://git.sciuro.org/Burathar/The-Hunt + branch: master + secret: thisissecret + requirements-file: requirements.txt + tests: tests.py \ No newline at end of file diff --git a/biscd/run.sh b/biscd/run.sh index 4387a26..5df6114 100755 --- a/biscd/run.sh +++ b/biscd/run.sh @@ -5,7 +5,7 @@ app_name='biscd' source "$script_dir/venv/bin/activate" get_conf () { - echo `grep -s "$1" /etc/$app_name.yml "$script_dir/biscd/config_default.yaml" | cut -d ':' -f 3 | head -n 1` + echo `grep -s "$1" /etc/$app_name/config.yaml "$script_dir/biscd/config_default.yaml" | cut -d ':' -f 3 | head -n 1` } enviroment=`get_conf 'flask_env'`