import os if os.environ.get("DEBUG", "false").lower() != "true": from gevent import monkey monkey.patch_all() import grpc.experimental.gevent grpc.experimental.gevent.init_gevent() import json import threading import time import warnings from flask import Response from app_factory import create_app # DO NOT REMOVE BELOW from events import event_handlers # noqa: F401 from extensions.ext_database import db # TODO: Find a way to avoid importing models here from models import account, dataset, model, source, task, tool, tools, web # noqa: F401 # DO NOT REMOVE ABOVE warnings.simplefilter("ignore", ResourceWarning) os.environ["TZ"] = "UTC" # windows platform not support tzset if hasattr(time, "tzset"): time.tzset() # ------------- # Configuration # ------------- config_type = os.getenv("EDITION", default="SELF_HOSTED") # ce edition first # create app app = create_app() celery = app.extensions["celery"] if app.config.get("TESTING"): print("App is running in TESTING mode") @app.after_request def after_request(response): """Add Version headers to the response.""" response.set_cookie("remember_token", "", expires=0) response.headers.add("X-Version", app.config["CURRENT_VERSION"]) response.headers.add("X-Env", app.config["DEPLOY_ENV"]) return response @app.route("/health") def health(): return Response( json.dumps({"pid": os.getpid(), "status": "ok", "version": app.config["CURRENT_VERSION"]}), status=200, content_type="application/json", ) @app.route("/threads") def threads(): num_threads = threading.active_count() threads = threading.enumerate() thread_list = [] for thread in threads: thread_name = thread.name thread_id = thread.ident is_alive = thread.is_alive() thread_list.append( { "name": thread_name, "id": thread_id, "is_alive": is_alive, } ) return { "pid": os.getpid(), "thread_num": num_threads, "threads": thread_list, } @app.route("/db-pool-stat") def pool_stat(): engine = db.engine return { "pid": os.getpid(), "pool_size": engine.pool.size(), "checked_in_connections": engine.pool.checkedin(), "checked_out_connections": engine.pool.checkedout(), "overflow_connections": engine.pool.overflow(), "connection_timeout": engine.pool.timeout(), "recycle_time": db.engine.pool._recycle, } if __name__ == "__main__": app.run(host="0.0.0.0", port=5001)