app.py (84 lines of code) (raw):

import os import json from flask import Flask, jsonify, abort, render_template, send_from_directory from flask_migrate import Migrate from elasticapm.contrib.flask import ElasticAPM from logging.config import dictConfig dictConfig({ 'version': 1, 'formatters': {'default': { 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }}, 'handlers': {'wsgi': { 'class': 'logging.StreamHandler', 'stream': 'ext://flask.logging.wsgi_errors_stream', 'formatter': 'default' }}, 'root': { 'level': 'INFO', 'handlers': ['wsgi'] } }) BASE_DIR = os.path.dirname(os.path.abspath(__file__)) SQLITE_DB_PATH = 'sqlite:///' + os.path.abspath(os.path.join(BASE_DIR, 'demo', 'db.sql')) app = Flask(__name__, static_folder=os.path.join("opbeans", "static", "build" ,"static"), template_folder="templates") app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL', SQLITE_DB_PATH) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['ELASTIC_APM'] = { 'SERVICE_NAME': os.environ.get('ELASTIC_APM_SERVICE_NAME', 'opbeans-flask'), 'SERVER_URL': os.environ.get('ELASTIC_APM_SERVER_URL', 'http://localhost:8200'), 'SERVER_TIMEOUT': "10s", 'DEBUG': True, } apm = ElasticAPM(app) #tracing = FlaskTracing(opentracing_tracer, trace_all_requests=True, app=app) if "GRAPHQL_URL" not in os.environ: from sql_implementation.models import db from sql_implementation import sql migrate = Migrate(app, db) db.init_app(app) app.config["sqldb"] = db app.register_blueprint(sql) if "GRAPHQL_URL" in os.environ: from gql import Client from gql.transport.requests import RequestsHTTPTransport from gql_implementation import gql_imp client = Client( transport=RequestsHTTPTransport( url=os.environ["GRAPHQL_URL"], retries=3, ), fetch_schema_from_transport=True, ) app.config["gql_client"] = client app.register_blueprint(gql_imp) @app.route('/images/<path:path>') def image(path): return send_from_directory(os.path.join("opbeans", "static", "build", "images"), path) @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def index(path): return render_template("index.html", **rum_settings()) RUM_CONFIG = None def rum_settings(): global RUM_CONFIG if RUM_CONFIG: return RUM_CONFIG url = os.environ.get('ELASTIC_APM_JS_SERVER_URL') if not url: url = apm.client.config.server_url package_json_file = os.path.join('opbeans', 'static', 'package.json') if os.path.exists(package_json_file): with open(package_json_file) as f: package_json = json.load(f) else: package_json = {} service_name = os.environ.get('ELASTIC_APM_JS_SERVICE_NAME', package_json.get('name', "opbeans-rum")) service_version = os.environ.get('ELASTIC_APM_JS_SERVICE_VERSION', package_json.get('version', None)) RUM_CONFIG = { "RUM_SERVICE_NAME": service_name, "RUM_SERVICE_VERSION": service_version, "RUM_SERVER_URL": url } return RUM_CONFIG if __name__ == '__main__': app.run(debug=True, port=5000)